{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "module 'numpy' has no attribute '__version__'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[6], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpyplot\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mplt\u001b[39;00m\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\pandas\\__init__.py:23\u001b[0m\n\u001b[0;32m     19\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m _hard_dependencies, _dependency, _missing_dependencies\n\u001b[0;32m     21\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m     22\u001b[0m     \u001b[38;5;66;03m# numpy compat\u001b[39;00m\n\u001b[1;32m---> 23\u001b[0m     \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[0;32m     24\u001b[0m         is_numpy_dev \u001b[38;5;28;01mas\u001b[39;00m _is_numpy_dev,  \u001b[38;5;66;03m# pyright: ignore[reportUnusedImport] # noqa: F401,E501\u001b[39;00m\n\u001b[0;32m     25\u001b[0m     )\n\u001b[0;32m     26\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m _err:  \u001b[38;5;66;03m# pragma: no cover\u001b[39;00m\n\u001b[0;32m     27\u001b[0m     _module \u001b[38;5;241m=\u001b[39m _err\u001b[38;5;241m.\u001b[39mname\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\pandas\\compat\\__init__.py:26\u001b[0m\n\u001b[0;32m     17\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_constants\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[0;32m     18\u001b[0m     IS64,\n\u001b[0;32m     19\u001b[0m     ISMUSL,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m     23\u001b[0m     PYPY,\n\u001b[0;32m     24\u001b[0m )\n\u001b[0;32m     25\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompressors\u001b[39;00m\n\u001b[1;32m---> 26\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m is_numpy_dev\n\u001b[0;32m     27\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpyarrow\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m (\n\u001b[0;32m     28\u001b[0m     pa_version_under7p0,\n\u001b[0;32m     29\u001b[0m     pa_version_under8p0,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m     34\u001b[0m     pa_version_under14p1,\n\u001b[0;32m     35\u001b[0m )\n\u001b[0;32m     37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m TYPE_CHECKING:\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\pandas\\compat\\numpy\\__init__.py:9\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutil\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mversion\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Version\n\u001b[0;32m      8\u001b[0m \u001b[38;5;66;03m# numpy versioning\u001b[39;00m\n\u001b[1;32m----> 9\u001b[0m _np_version \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39m__version__\n\u001b[0;32m     10\u001b[0m _nlv \u001b[38;5;241m=\u001b[39m Version(_np_version)\n\u001b[0;32m     11\u001b[0m np_version_gte1p24 \u001b[38;5;241m=\u001b[39m _nlv \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m Version(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1.24\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "\u001b[1;31mAttributeError\u001b[0m: module 'numpy' has no attribute '__version__'"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.model_selection import KFold, train_test_split\n",
    "from sklearn.metrics import precision_recall_fscore_support, roc_auc_score\n",
    "import lightgbm as lgb\n",
    "from tqdm import tqdm_notebook\n",
    "import joblib\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "module 'numpy' has no attribute 'np'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[8], line 2\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m s\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mnp\u001b[38;5;241m.\u001b[39marange(\u001b[38;5;241m5\u001b[39m)\n\u001b[0;32m      3\u001b[0m s\n",
      "\u001b[1;31mAttributeError\u001b[0m: module 'numpy' has no attribute 'np'"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "s=np.np.arange(5)\n",
    "s\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_transaction shape :  (590540, 394)\n",
      "train_identity shape :  (144233, 41)\n",
      "test_transaction shape :  (506691, 393)\n",
      "test_identity shape :  (141907, 41)\n",
      "CPU times: user 18.4 s, sys: 1.17 s, total: 19.6 s\n",
      "Wall time: 19.6 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# 加载训练和测试数据集\n",
    "\n",
    "train_transaction = pd.read_csv(\"train_transaction.csv\")\n",
    "print(\"train_transaction shape : \", train_transaction.shape)\n",
    "\n",
    "train_identity = pd.read_csv(\"train_identity.csv\")\n",
    "print(\"train_identity shape : \", train_identity.shape)\n",
    "\n",
    "test_transaction = pd.read_csv(\"test_transaction.csv\")\n",
    "print(\"test_transaction shape : \", test_transaction.shape)\n",
    "\n",
    "test_identity = pd.read_csv(\"test_identity.csv\")\n",
    "print(\"test_identity shape : \", test_identity.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>isFraud</th>\n",
       "      <th>TransactionDT</th>\n",
       "      <th>TransactionAmt</th>\n",
       "      <th>ProductCD</th>\n",
       "      <th>card1</th>\n",
       "      <th>card2</th>\n",
       "      <th>card3</th>\n",
       "      <th>card4</th>\n",
       "      <th>card5</th>\n",
       "      <th>...</th>\n",
       "      <th>V330</th>\n",
       "      <th>V331</th>\n",
       "      <th>V332</th>\n",
       "      <th>V333</th>\n",
       "      <th>V334</th>\n",
       "      <th>V335</th>\n",
       "      <th>V336</th>\n",
       "      <th>V337</th>\n",
       "      <th>V338</th>\n",
       "      <th>V339</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2987000</td>\n",
       "      <td>0</td>\n",
       "      <td>86400</td>\n",
       "      <td>68.5</td>\n",
       "      <td>W</td>\n",
       "      <td>13926</td>\n",
       "      <td>NaN</td>\n",
       "      <td>150.0</td>\n",
       "      <td>discover</td>\n",
       "      <td>142.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2987001</td>\n",
       "      <td>0</td>\n",
       "      <td>86401</td>\n",
       "      <td>29.0</td>\n",
       "      <td>W</td>\n",
       "      <td>2755</td>\n",
       "      <td>404.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>mastercard</td>\n",
       "      <td>102.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2987002</td>\n",
       "      <td>0</td>\n",
       "      <td>86469</td>\n",
       "      <td>59.0</td>\n",
       "      <td>W</td>\n",
       "      <td>4663</td>\n",
       "      <td>490.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>visa</td>\n",
       "      <td>166.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2987003</td>\n",
       "      <td>0</td>\n",
       "      <td>86499</td>\n",
       "      <td>50.0</td>\n",
       "      <td>W</td>\n",
       "      <td>18132</td>\n",
       "      <td>567.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>mastercard</td>\n",
       "      <td>117.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2987004</td>\n",
       "      <td>0</td>\n",
       "      <td>86506</td>\n",
       "      <td>50.0</td>\n",
       "      <td>H</td>\n",
       "      <td>4497</td>\n",
       "      <td>514.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>mastercard</td>\n",
       "      <td>102.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 394 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   TransactionID  isFraud  TransactionDT  TransactionAmt ProductCD  card1  \\\n",
       "0        2987000        0          86400            68.5         W  13926   \n",
       "1        2987001        0          86401            29.0         W   2755   \n",
       "2        2987002        0          86469            59.0         W   4663   \n",
       "3        2987003        0          86499            50.0         W  18132   \n",
       "4        2987004        0          86506            50.0         H   4497   \n",
       "\n",
       "   card2  card3       card4  card5  ... V330  V331  V332  V333  V334 V335  \\\n",
       "0    NaN  150.0    discover  142.0  ...  NaN   NaN   NaN   NaN   NaN  NaN   \n",
       "1  404.0  150.0  mastercard  102.0  ...  NaN   NaN   NaN   NaN   NaN  NaN   \n",
       "2  490.0  150.0        visa  166.0  ...  NaN   NaN   NaN   NaN   NaN  NaN   \n",
       "3  567.0  150.0  mastercard  117.0  ...  NaN   NaN   NaN   NaN   NaN  NaN   \n",
       "4  514.0  150.0  mastercard  102.0  ...  0.0   0.0   0.0   0.0   0.0  0.0   \n",
       "\n",
       "  V336  V337  V338  V339  \n",
       "0  NaN   NaN   NaN   NaN  \n",
       "1  NaN   NaN   NaN   NaN  \n",
       "2  NaN   NaN   NaN   NaN  \n",
       "3  NaN   NaN   NaN   NaN  \n",
       "4  0.0   0.0   0.0   0.0  \n",
       "\n",
       "[5 rows x 394 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 默认显示前5行\n",
    "train_transaction.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 590540 entries, 0 to 590539\n",
      "Columns: 394 entries, TransactionID to V339\n",
      "dtypes: float64(376), int64(4), object(14)\n",
      "memory usage: 1.7+ GB\n"
     ]
    }
   ],
   "source": [
    "# 查看数据信息\n",
    "train_transaction.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>isFraud</th>\n",
       "      <th>TransactionDT</th>\n",
       "      <th>TransactionAmt</th>\n",
       "      <th>card1</th>\n",
       "      <th>card2</th>\n",
       "      <th>card3</th>\n",
       "      <th>card5</th>\n",
       "      <th>addr1</th>\n",
       "      <th>addr2</th>\n",
       "      <th>...</th>\n",
       "      <th>V330</th>\n",
       "      <th>V331</th>\n",
       "      <th>V332</th>\n",
       "      <th>V333</th>\n",
       "      <th>V334</th>\n",
       "      <th>V335</th>\n",
       "      <th>V336</th>\n",
       "      <th>V337</th>\n",
       "      <th>V338</th>\n",
       "      <th>V339</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5.905400e+05</td>\n",
       "      <td>590540.000000</td>\n",
       "      <td>5.905400e+05</td>\n",
       "      <td>590540.000000</td>\n",
       "      <td>590540.000000</td>\n",
       "      <td>581607.000000</td>\n",
       "      <td>588975.000000</td>\n",
       "      <td>586281.000000</td>\n",
       "      <td>524834.000000</td>\n",
       "      <td>524834.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.00000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "      <td>82351.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.282270e+06</td>\n",
       "      <td>0.034990</td>\n",
       "      <td>7.372311e+06</td>\n",
       "      <td>135.027176</td>\n",
       "      <td>9898.734658</td>\n",
       "      <td>362.555488</td>\n",
       "      <td>153.194925</td>\n",
       "      <td>199.278897</td>\n",
       "      <td>290.733794</td>\n",
       "      <td>86.800630</td>\n",
       "      <td>...</td>\n",
       "      <td>0.775874</td>\n",
       "      <td>721.741883</td>\n",
       "      <td>1375.783644</td>\n",
       "      <td>1014.622782</td>\n",
       "      <td>9.807015</td>\n",
       "      <td>59.16455</td>\n",
       "      <td>28.530903</td>\n",
       "      <td>55.352422</td>\n",
       "      <td>151.160542</td>\n",
       "      <td>100.700882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.704744e+05</td>\n",
       "      <td>0.183755</td>\n",
       "      <td>4.617224e+06</td>\n",
       "      <td>239.162522</td>\n",
       "      <td>4901.170153</td>\n",
       "      <td>157.793246</td>\n",
       "      <td>11.336444</td>\n",
       "      <td>41.244453</td>\n",
       "      <td>101.741072</td>\n",
       "      <td>2.690623</td>\n",
       "      <td>...</td>\n",
       "      <td>4.727971</td>\n",
       "      <td>6217.223583</td>\n",
       "      <td>11169.275702</td>\n",
       "      <td>7955.735482</td>\n",
       "      <td>243.861391</td>\n",
       "      <td>387.62948</td>\n",
       "      <td>274.576920</td>\n",
       "      <td>668.486833</td>\n",
       "      <td>1095.034387</td>\n",
       "      <td>814.946722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>2.987000e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.640000e+04</td>\n",
       "      <td>0.251000</td>\n",
       "      <td>1000.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>3.134635e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.027058e+06</td>\n",
       "      <td>43.321000</td>\n",
       "      <td>6019.000000</td>\n",
       "      <td>214.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>204.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.282270e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.306528e+06</td>\n",
       "      <td>68.769000</td>\n",
       "      <td>9678.000000</td>\n",
       "      <td>361.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>226.000000</td>\n",
       "      <td>299.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3.429904e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.124662e+07</td>\n",
       "      <td>125.000000</td>\n",
       "      <td>14184.000000</td>\n",
       "      <td>512.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>226.000000</td>\n",
       "      <td>330.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3.577539e+06</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.581113e+07</td>\n",
       "      <td>31937.391000</td>\n",
       "      <td>18396.000000</td>\n",
       "      <td>600.000000</td>\n",
       "      <td>231.000000</td>\n",
       "      <td>237.000000</td>\n",
       "      <td>540.000000</td>\n",
       "      <td>102.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>55.000000</td>\n",
       "      <td>160000.000000</td>\n",
       "      <td>160000.000000</td>\n",
       "      <td>160000.000000</td>\n",
       "      <td>55125.000000</td>\n",
       "      <td>55125.00000</td>\n",
       "      <td>55125.000000</td>\n",
       "      <td>104060.000000</td>\n",
       "      <td>104060.000000</td>\n",
       "      <td>104060.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 380 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       TransactionID        isFraud  TransactionDT  TransactionAmt  \\\n",
       "count   5.905400e+05  590540.000000   5.905400e+05   590540.000000   \n",
       "mean    3.282270e+06       0.034990   7.372311e+06      135.027176   \n",
       "std     1.704744e+05       0.183755   4.617224e+06      239.162522   \n",
       "min     2.987000e+06       0.000000   8.640000e+04        0.251000   \n",
       "25%     3.134635e+06       0.000000   3.027058e+06       43.321000   \n",
       "50%     3.282270e+06       0.000000   7.306528e+06       68.769000   \n",
       "75%     3.429904e+06       0.000000   1.124662e+07      125.000000   \n",
       "max     3.577539e+06       1.000000   1.581113e+07    31937.391000   \n",
       "\n",
       "               card1          card2          card3          card5  \\\n",
       "count  590540.000000  581607.000000  588975.000000  586281.000000   \n",
       "mean     9898.734658     362.555488     153.194925     199.278897   \n",
       "std      4901.170153     157.793246      11.336444      41.244453   \n",
       "min      1000.000000     100.000000     100.000000     100.000000   \n",
       "25%      6019.000000     214.000000     150.000000     166.000000   \n",
       "50%      9678.000000     361.000000     150.000000     226.000000   \n",
       "75%     14184.000000     512.000000     150.000000     226.000000   \n",
       "max     18396.000000     600.000000     231.000000     237.000000   \n",
       "\n",
       "               addr1          addr2  ...          V330           V331  \\\n",
       "count  524834.000000  524834.000000  ...  82351.000000   82351.000000   \n",
       "mean      290.733794      86.800630  ...      0.775874     721.741883   \n",
       "std       101.741072       2.690623  ...      4.727971    6217.223583   \n",
       "min       100.000000      10.000000  ...      0.000000       0.000000   \n",
       "25%       204.000000      87.000000  ...      0.000000       0.000000   \n",
       "50%       299.000000      87.000000  ...      0.000000       0.000000   \n",
       "75%       330.000000      87.000000  ...      0.000000       0.000000   \n",
       "max       540.000000     102.000000  ...     55.000000  160000.000000   \n",
       "\n",
       "                V332           V333          V334         V335          V336  \\\n",
       "count   82351.000000   82351.000000  82351.000000  82351.00000  82351.000000   \n",
       "mean     1375.783644    1014.622782      9.807015     59.16455     28.530903   \n",
       "std     11169.275702    7955.735482    243.861391    387.62948    274.576920   \n",
       "min         0.000000       0.000000      0.000000      0.00000      0.000000   \n",
       "25%         0.000000       0.000000      0.000000      0.00000      0.000000   \n",
       "50%         0.000000       0.000000      0.000000      0.00000      0.000000   \n",
       "75%        25.000000       0.000000      0.000000      0.00000      0.000000   \n",
       "max    160000.000000  160000.000000  55125.000000  55125.00000  55125.000000   \n",
       "\n",
       "                V337           V338           V339  \n",
       "count   82351.000000   82351.000000   82351.000000  \n",
       "mean       55.352422     151.160542     100.700882  \n",
       "std       668.486833    1095.034387     814.946722  \n",
       "min         0.000000       0.000000       0.000000  \n",
       "25%         0.000000       0.000000       0.000000  \n",
       "50%         0.000000       0.000000       0.000000  \n",
       "75%         0.000000       0.000000       0.000000  \n",
       "max    104060.000000  104060.000000  104060.000000  \n",
       "\n",
       "[8 rows x 380 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看数据描述\n",
    "train_transaction.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "TransactionID          0\n",
       "isFraud                0\n",
       "TransactionDT          0\n",
       "TransactionAmt         0\n",
       "ProductCD              0\n",
       "                   ...  \n",
       "V335              508189\n",
       "V336              508189\n",
       "V337              508189\n",
       "V338              508189\n",
       "V339              508189\n",
       "Length: 394, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计数据中的NaN\n",
    "train_transaction.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>id_01</th>\n",
       "      <th>id_02</th>\n",
       "      <th>id_03</th>\n",
       "      <th>id_04</th>\n",
       "      <th>id_05</th>\n",
       "      <th>id_06</th>\n",
       "      <th>id_07</th>\n",
       "      <th>id_08</th>\n",
       "      <th>id_09</th>\n",
       "      <th>...</th>\n",
       "      <th>id_31</th>\n",
       "      <th>id_32</th>\n",
       "      <th>id_33</th>\n",
       "      <th>id_34</th>\n",
       "      <th>id_35</th>\n",
       "      <th>id_36</th>\n",
       "      <th>id_37</th>\n",
       "      <th>id_38</th>\n",
       "      <th>DeviceType</th>\n",
       "      <th>DeviceInfo</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2987004</td>\n",
       "      <td>0.0</td>\n",
       "      <td>70787.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>samsung browser 6.2</td>\n",
       "      <td>32.0</td>\n",
       "      <td>2220x1080</td>\n",
       "      <td>match_status:2</td>\n",
       "      <td>T</td>\n",
       "      <td>F</td>\n",
       "      <td>T</td>\n",
       "      <td>T</td>\n",
       "      <td>mobile</td>\n",
       "      <td>SAMSUNG SM-G892A Build/NRD90M</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2987008</td>\n",
       "      <td>-5.0</td>\n",
       "      <td>98945.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-5.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>mobile safari 11.0</td>\n",
       "      <td>32.0</td>\n",
       "      <td>1334x750</td>\n",
       "      <td>match_status:1</td>\n",
       "      <td>T</td>\n",
       "      <td>F</td>\n",
       "      <td>F</td>\n",
       "      <td>T</td>\n",
       "      <td>mobile</td>\n",
       "      <td>iOS Device</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2987010</td>\n",
       "      <td>-5.0</td>\n",
       "      <td>191631.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>chrome 62.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>F</td>\n",
       "      <td>F</td>\n",
       "      <td>T</td>\n",
       "      <td>T</td>\n",
       "      <td>desktop</td>\n",
       "      <td>Windows</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2987011</td>\n",
       "      <td>-5.0</td>\n",
       "      <td>221832.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-6.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>chrome 62.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>F</td>\n",
       "      <td>F</td>\n",
       "      <td>T</td>\n",
       "      <td>T</td>\n",
       "      <td>desktop</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2987016</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7460.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>chrome 62.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>1280x800</td>\n",
       "      <td>match_status:2</td>\n",
       "      <td>T</td>\n",
       "      <td>F</td>\n",
       "      <td>T</td>\n",
       "      <td>T</td>\n",
       "      <td>desktop</td>\n",
       "      <td>MacOS</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 41 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   TransactionID  id_01     id_02  id_03  id_04  id_05  id_06  id_07  id_08  \\\n",
       "0        2987004    0.0   70787.0    NaN    NaN    NaN    NaN    NaN    NaN   \n",
       "1        2987008   -5.0   98945.0    NaN    NaN    0.0   -5.0    NaN    NaN   \n",
       "2        2987010   -5.0  191631.0    0.0    0.0    0.0    0.0    NaN    NaN   \n",
       "3        2987011   -5.0  221832.0    NaN    NaN    0.0   -6.0    NaN    NaN   \n",
       "4        2987016    0.0    7460.0    0.0    0.0    1.0    0.0    NaN    NaN   \n",
       "\n",
       "   id_09  ...                id_31  id_32      id_33           id_34  id_35  \\\n",
       "0    NaN  ...  samsung browser 6.2   32.0  2220x1080  match_status:2      T   \n",
       "1    NaN  ...   mobile safari 11.0   32.0   1334x750  match_status:1      T   \n",
       "2    0.0  ...          chrome 62.0    NaN        NaN             NaN      F   \n",
       "3    NaN  ...          chrome 62.0    NaN        NaN             NaN      F   \n",
       "4    0.0  ...          chrome 62.0   24.0   1280x800  match_status:2      T   \n",
       "\n",
       "  id_36 id_37  id_38  DeviceType                     DeviceInfo  \n",
       "0     F     T      T      mobile  SAMSUNG SM-G892A Build/NRD90M  \n",
       "1     F     F      T      mobile                     iOS Device  \n",
       "2     F     T      T     desktop                        Windows  \n",
       "3     F     T      T     desktop                            NaN  \n",
       "4     F     T      T     desktop                          MacOS  \n",
       "\n",
       "[5 rows x 41 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 默认显示前5行\n",
    "train_identity.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 144233 entries, 0 to 144232\n",
      "Data columns (total 41 columns):\n",
      " #   Column         Non-Null Count   Dtype  \n",
      "---  ------         --------------   -----  \n",
      " 0   TransactionID  144233 non-null  int64  \n",
      " 1   id_01          144233 non-null  float64\n",
      " 2   id_02          140872 non-null  float64\n",
      " 3   id_03          66324 non-null   float64\n",
      " 4   id_04          66324 non-null   float64\n",
      " 5   id_05          136865 non-null  float64\n",
      " 6   id_06          136865 non-null  float64\n",
      " 7   id_07          5155 non-null    float64\n",
      " 8   id_08          5155 non-null    float64\n",
      " 9   id_09          74926 non-null   float64\n",
      " 10  id_10          74926 non-null   float64\n",
      " 11  id_11          140978 non-null  float64\n",
      " 12  id_12          144233 non-null  object \n",
      " 13  id_13          127320 non-null  float64\n",
      " 14  id_14          80044 non-null   float64\n",
      " 15  id_15          140985 non-null  object \n",
      " 16  id_16          129340 non-null  object \n",
      " 17  id_17          139369 non-null  float64\n",
      " 18  id_18          45113 non-null   float64\n",
      " 19  id_19          139318 non-null  float64\n",
      " 20  id_20          139261 non-null  float64\n",
      " 21  id_21          5159 non-null    float64\n",
      " 22  id_22          5169 non-null    float64\n",
      " 23  id_23          5169 non-null    object \n",
      " 24  id_24          4747 non-null    float64\n",
      " 25  id_25          5132 non-null    float64\n",
      " 26  id_26          5163 non-null    float64\n",
      " 27  id_27          5169 non-null    object \n",
      " 28  id_28          140978 non-null  object \n",
      " 29  id_29          140978 non-null  object \n",
      " 30  id_30          77565 non-null   object \n",
      " 31  id_31          140282 non-null  object \n",
      " 32  id_32          77586 non-null   float64\n",
      " 33  id_33          73289 non-null   object \n",
      " 34  id_34          77805 non-null   object \n",
      " 35  id_35          140985 non-null  object \n",
      " 36  id_36          140985 non-null  object \n",
      " 37  id_37          140985 non-null  object \n",
      " 38  id_38          140985 non-null  object \n",
      " 39  DeviceType     140810 non-null  object \n",
      " 40  DeviceInfo     118666 non-null  object \n",
      "dtypes: float64(23), int64(1), object(17)\n",
      "memory usage: 45.1+ MB\n"
     ]
    }
   ],
   "source": [
    "# 数据信息\n",
    "train_identity.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>id_01</th>\n",
       "      <th>id_02</th>\n",
       "      <th>id_03</th>\n",
       "      <th>id_04</th>\n",
       "      <th>id_05</th>\n",
       "      <th>id_06</th>\n",
       "      <th>id_07</th>\n",
       "      <th>id_08</th>\n",
       "      <th>id_09</th>\n",
       "      <th>...</th>\n",
       "      <th>id_17</th>\n",
       "      <th>id_18</th>\n",
       "      <th>id_19</th>\n",
       "      <th>id_20</th>\n",
       "      <th>id_21</th>\n",
       "      <th>id_22</th>\n",
       "      <th>id_24</th>\n",
       "      <th>id_25</th>\n",
       "      <th>id_26</th>\n",
       "      <th>id_32</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1.442330e+05</td>\n",
       "      <td>144233.000000</td>\n",
       "      <td>140872.000000</td>\n",
       "      <td>66324.000000</td>\n",
       "      <td>66324.000000</td>\n",
       "      <td>136865.000000</td>\n",
       "      <td>136865.000000</td>\n",
       "      <td>5155.000000</td>\n",
       "      <td>5155.000000</td>\n",
       "      <td>74926.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>139369.000000</td>\n",
       "      <td>45113.000000</td>\n",
       "      <td>139318.000000</td>\n",
       "      <td>139261.000000</td>\n",
       "      <td>5159.000000</td>\n",
       "      <td>5169.000000</td>\n",
       "      <td>4747.000000</td>\n",
       "      <td>5132.000000</td>\n",
       "      <td>5163.000000</td>\n",
       "      <td>77586.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.236329e+06</td>\n",
       "      <td>-10.170502</td>\n",
       "      <td>174716.584708</td>\n",
       "      <td>0.060189</td>\n",
       "      <td>-0.058938</td>\n",
       "      <td>1.615585</td>\n",
       "      <td>-6.698710</td>\n",
       "      <td>13.285354</td>\n",
       "      <td>-38.600388</td>\n",
       "      <td>0.091023</td>\n",
       "      <td>...</td>\n",
       "      <td>189.451377</td>\n",
       "      <td>14.237337</td>\n",
       "      <td>353.128174</td>\n",
       "      <td>403.882666</td>\n",
       "      <td>368.269820</td>\n",
       "      <td>16.002708</td>\n",
       "      <td>12.800927</td>\n",
       "      <td>329.608924</td>\n",
       "      <td>149.070308</td>\n",
       "      <td>26.508597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.788496e+05</td>\n",
       "      <td>14.347949</td>\n",
       "      <td>159651.816856</td>\n",
       "      <td>0.598231</td>\n",
       "      <td>0.701015</td>\n",
       "      <td>5.249856</td>\n",
       "      <td>16.491104</td>\n",
       "      <td>11.384207</td>\n",
       "      <td>26.084899</td>\n",
       "      <td>0.983842</td>\n",
       "      <td>...</td>\n",
       "      <td>30.375360</td>\n",
       "      <td>1.561302</td>\n",
       "      <td>141.095343</td>\n",
       "      <td>152.160327</td>\n",
       "      <td>198.847038</td>\n",
       "      <td>6.897665</td>\n",
       "      <td>2.372447</td>\n",
       "      <td>97.461089</td>\n",
       "      <td>32.101995</td>\n",
       "      <td>3.737502</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>2.987004e+06</td>\n",
       "      <td>-100.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-13.000000</td>\n",
       "      <td>-28.000000</td>\n",
       "      <td>-72.000000</td>\n",
       "      <td>-100.000000</td>\n",
       "      <td>-46.000000</td>\n",
       "      <td>-100.000000</td>\n",
       "      <td>-36.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>3.077142e+06</td>\n",
       "      <td>-10.000000</td>\n",
       "      <td>67992.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-6.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>-48.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>13.000000</td>\n",
       "      <td>266.000000</td>\n",
       "      <td>256.000000</td>\n",
       "      <td>252.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>321.000000</td>\n",
       "      <td>119.000000</td>\n",
       "      <td>24.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.198818e+06</td>\n",
       "      <td>-5.000000</td>\n",
       "      <td>125800.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>-34.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>341.000000</td>\n",
       "      <td>472.000000</td>\n",
       "      <td>252.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>321.000000</td>\n",
       "      <td>149.000000</td>\n",
       "      <td>24.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3.392923e+06</td>\n",
       "      <td>-5.000000</td>\n",
       "      <td>228749.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>-23.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>225.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>427.000000</td>\n",
       "      <td>533.000000</td>\n",
       "      <td>486.500000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>371.000000</td>\n",
       "      <td>169.000000</td>\n",
       "      <td>32.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3.577534e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>999595.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>229.000000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>671.000000</td>\n",
       "      <td>661.000000</td>\n",
       "      <td>854.000000</td>\n",
       "      <td>44.000000</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>548.000000</td>\n",
       "      <td>216.000000</td>\n",
       "      <td>32.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       TransactionID          id_01          id_02         id_03  \\\n",
       "count   1.442330e+05  144233.000000  140872.000000  66324.000000   \n",
       "mean    3.236329e+06     -10.170502  174716.584708      0.060189   \n",
       "std     1.788496e+05      14.347949  159651.816856      0.598231   \n",
       "min     2.987004e+06    -100.000000       1.000000    -13.000000   \n",
       "25%     3.077142e+06     -10.000000   67992.000000      0.000000   \n",
       "50%     3.198818e+06      -5.000000  125800.500000      0.000000   \n",
       "75%     3.392923e+06      -5.000000  228749.000000      0.000000   \n",
       "max     3.577534e+06       0.000000  999595.000000     10.000000   \n",
       "\n",
       "              id_04          id_05          id_06        id_07        id_08  \\\n",
       "count  66324.000000  136865.000000  136865.000000  5155.000000  5155.000000   \n",
       "mean      -0.058938       1.615585      -6.698710    13.285354   -38.600388   \n",
       "std        0.701015       5.249856      16.491104    11.384207    26.084899   \n",
       "min      -28.000000     -72.000000    -100.000000   -46.000000  -100.000000   \n",
       "25%        0.000000       0.000000      -6.000000     5.000000   -48.000000   \n",
       "50%        0.000000       0.000000       0.000000    14.000000   -34.000000   \n",
       "75%        0.000000       1.000000       0.000000    22.000000   -23.000000   \n",
       "max        0.000000      52.000000       0.000000    61.000000     0.000000   \n",
       "\n",
       "              id_09  ...          id_17         id_18          id_19  \\\n",
       "count  74926.000000  ...  139369.000000  45113.000000  139318.000000   \n",
       "mean       0.091023  ...     189.451377     14.237337     353.128174   \n",
       "std        0.983842  ...      30.375360      1.561302     141.095343   \n",
       "min      -36.000000  ...     100.000000     10.000000     100.000000   \n",
       "25%        0.000000  ...     166.000000     13.000000     266.000000   \n",
       "50%        0.000000  ...     166.000000     15.000000     341.000000   \n",
       "75%        0.000000  ...     225.000000     15.000000     427.000000   \n",
       "max       25.000000  ...     229.000000     29.000000     671.000000   \n",
       "\n",
       "               id_20        id_21        id_22        id_24        id_25  \\\n",
       "count  139261.000000  5159.000000  5169.000000  4747.000000  5132.000000   \n",
       "mean      403.882666   368.269820    16.002708    12.800927   329.608924   \n",
       "std       152.160327   198.847038     6.897665     2.372447    97.461089   \n",
       "min       100.000000   100.000000    10.000000    11.000000   100.000000   \n",
       "25%       256.000000   252.000000    14.000000    11.000000   321.000000   \n",
       "50%       472.000000   252.000000    14.000000    11.000000   321.000000   \n",
       "75%       533.000000   486.500000    14.000000    15.000000   371.000000   \n",
       "max       661.000000   854.000000    44.000000    26.000000   548.000000   \n",
       "\n",
       "             id_26         id_32  \n",
       "count  5163.000000  77586.000000  \n",
       "mean    149.070308     26.508597  \n",
       "std      32.101995      3.737502  \n",
       "min     100.000000      0.000000  \n",
       "25%     119.000000     24.000000  \n",
       "50%     149.000000     24.000000  \n",
       "75%     169.000000     32.000000  \n",
       "max     216.000000     32.000000  \n",
       "\n",
       "[8 rows x 24 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数据描述\n",
    "train_identity.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 144233 entries, 0 to 144232\n",
      "Data columns (total 41 columns):\n",
      " #   Column         Non-Null Count   Dtype\n",
      "---  ------         --------------   -----\n",
      " 0   TransactionID  144233 non-null  bool \n",
      " 1   id_01          144233 non-null  bool \n",
      " 2   id_02          144233 non-null  bool \n",
      " 3   id_03          144233 non-null  bool \n",
      " 4   id_04          144233 non-null  bool \n",
      " 5   id_05          144233 non-null  bool \n",
      " 6   id_06          144233 non-null  bool \n",
      " 7   id_07          144233 non-null  bool \n",
      " 8   id_08          144233 non-null  bool \n",
      " 9   id_09          144233 non-null  bool \n",
      " 10  id_10          144233 non-null  bool \n",
      " 11  id_11          144233 non-null  bool \n",
      " 12  id_12          144233 non-null  bool \n",
      " 13  id_13          144233 non-null  bool \n",
      " 14  id_14          144233 non-null  bool \n",
      " 15  id_15          144233 non-null  bool \n",
      " 16  id_16          144233 non-null  bool \n",
      " 17  id_17          144233 non-null  bool \n",
      " 18  id_18          144233 non-null  bool \n",
      " 19  id_19          144233 non-null  bool \n",
      " 20  id_20          144233 non-null  bool \n",
      " 21  id_21          144233 non-null  bool \n",
      " 22  id_22          144233 non-null  bool \n",
      " 23  id_23          144233 non-null  bool \n",
      " 24  id_24          144233 non-null  bool \n",
      " 25  id_25          144233 non-null  bool \n",
      " 26  id_26          144233 non-null  bool \n",
      " 27  id_27          144233 non-null  bool \n",
      " 28  id_28          144233 non-null  bool \n",
      " 29  id_29          144233 non-null  bool \n",
      " 30  id_30          144233 non-null  bool \n",
      " 31  id_31          144233 non-null  bool \n",
      " 32  id_32          144233 non-null  bool \n",
      " 33  id_33          144233 non-null  bool \n",
      " 34  id_34          144233 non-null  bool \n",
      " 35  id_35          144233 non-null  bool \n",
      " 36  id_36          144233 non-null  bool \n",
      " 37  id_37          144233 non-null  bool \n",
      " 38  id_38          144233 non-null  bool \n",
      " 39  DeviceType     144233 non-null  bool \n",
      " 40  DeviceInfo     144233 non-null  bool \n",
      "dtypes: bool(41)\n",
      "memory usage: 5.6 MB\n"
     ]
    }
   ],
   "source": [
    "# 统计NaN\n",
    "train_identity.isnull().info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>TransactionDT</th>\n",
       "      <th>TransactionAmt</th>\n",
       "      <th>ProductCD</th>\n",
       "      <th>card1</th>\n",
       "      <th>card2</th>\n",
       "      <th>card3</th>\n",
       "      <th>card4</th>\n",
       "      <th>card5</th>\n",
       "      <th>card6</th>\n",
       "      <th>...</th>\n",
       "      <th>V330</th>\n",
       "      <th>V331</th>\n",
       "      <th>V332</th>\n",
       "      <th>V333</th>\n",
       "      <th>V334</th>\n",
       "      <th>V335</th>\n",
       "      <th>V336</th>\n",
       "      <th>V337</th>\n",
       "      <th>V338</th>\n",
       "      <th>V339</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3663549</td>\n",
       "      <td>18403224</td>\n",
       "      <td>31.95</td>\n",
       "      <td>W</td>\n",
       "      <td>10409</td>\n",
       "      <td>111.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>visa</td>\n",
       "      <td>226.0</td>\n",
       "      <td>debit</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3663550</td>\n",
       "      <td>18403263</td>\n",
       "      <td>49.00</td>\n",
       "      <td>W</td>\n",
       "      <td>4272</td>\n",
       "      <td>111.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>visa</td>\n",
       "      <td>226.0</td>\n",
       "      <td>debit</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3663551</td>\n",
       "      <td>18403310</td>\n",
       "      <td>171.00</td>\n",
       "      <td>W</td>\n",
       "      <td>4476</td>\n",
       "      <td>574.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>visa</td>\n",
       "      <td>226.0</td>\n",
       "      <td>debit</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3663552</td>\n",
       "      <td>18403310</td>\n",
       "      <td>284.95</td>\n",
       "      <td>W</td>\n",
       "      <td>10989</td>\n",
       "      <td>360.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>visa</td>\n",
       "      <td>166.0</td>\n",
       "      <td>debit</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3663553</td>\n",
       "      <td>18403317</td>\n",
       "      <td>67.95</td>\n",
       "      <td>W</td>\n",
       "      <td>18018</td>\n",
       "      <td>452.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>mastercard</td>\n",
       "      <td>117.0</td>\n",
       "      <td>debit</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 393 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   TransactionID  TransactionDT  TransactionAmt ProductCD  card1  card2  \\\n",
       "0        3663549       18403224           31.95         W  10409  111.0   \n",
       "1        3663550       18403263           49.00         W   4272  111.0   \n",
       "2        3663551       18403310          171.00         W   4476  574.0   \n",
       "3        3663552       18403310          284.95         W  10989  360.0   \n",
       "4        3663553       18403317           67.95         W  18018  452.0   \n",
       "\n",
       "   card3       card4  card5  card6  ...  V330  V331  V332  V333 V334 V335  \\\n",
       "0  150.0        visa  226.0  debit  ...   NaN   NaN   NaN   NaN  NaN  NaN   \n",
       "1  150.0        visa  226.0  debit  ...   NaN   NaN   NaN   NaN  NaN  NaN   \n",
       "2  150.0        visa  226.0  debit  ...   NaN   NaN   NaN   NaN  NaN  NaN   \n",
       "3  150.0        visa  166.0  debit  ...   NaN   NaN   NaN   NaN  NaN  NaN   \n",
       "4  150.0  mastercard  117.0  debit  ...   NaN   NaN   NaN   NaN  NaN  NaN   \n",
       "\n",
       "   V336  V337  V338  V339  \n",
       "0   NaN   NaN   NaN   NaN  \n",
       "1   NaN   NaN   NaN   NaN  \n",
       "2   NaN   NaN   NaN   NaN  \n",
       "3   NaN   NaN   NaN   NaN  \n",
       "4   NaN   NaN   NaN   NaN  \n",
       "\n",
       "[5 rows x 393 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# test transaction 数据默认显示\n",
    "test_transaction.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 506691 entries, 0 to 506690\n",
      "Columns: 393 entries, TransactionID to V339\n",
      "dtypes: float64(376), int64(3), object(14)\n",
      "memory usage: 1.5+ GB\n"
     ]
    }
   ],
   "source": [
    "test_transaction.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>TransactionDT</th>\n",
       "      <th>TransactionAmt</th>\n",
       "      <th>card1</th>\n",
       "      <th>card2</th>\n",
       "      <th>card3</th>\n",
       "      <th>card5</th>\n",
       "      <th>addr1</th>\n",
       "      <th>addr2</th>\n",
       "      <th>dist1</th>\n",
       "      <th>...</th>\n",
       "      <th>V330</th>\n",
       "      <th>V331</th>\n",
       "      <th>V332</th>\n",
       "      <th>V333</th>\n",
       "      <th>V334</th>\n",
       "      <th>V335</th>\n",
       "      <th>V336</th>\n",
       "      <th>V337</th>\n",
       "      <th>V338</th>\n",
       "      <th>V339</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5.066910e+05</td>\n",
       "      <td>5.066910e+05</td>\n",
       "      <td>506691.000000</td>\n",
       "      <td>506691.000000</td>\n",
       "      <td>498037.000000</td>\n",
       "      <td>503689.000000</td>\n",
       "      <td>502144.000000</td>\n",
       "      <td>441082.000000</td>\n",
       "      <td>441082.000000</td>\n",
       "      <td>215474.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>76431.000000</td>\n",
       "      <td>7.643100e+04</td>\n",
       "      <td>7.643100e+04</td>\n",
       "      <td>7.643100e+04</td>\n",
       "      <td>76431.000000</td>\n",
       "      <td>76431.000000</td>\n",
       "      <td>76431.000000</td>\n",
       "      <td>76431.000000</td>\n",
       "      <td>76431.000000</td>\n",
       "      <td>76431.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.916894e+06</td>\n",
       "      <td>2.692994e+07</td>\n",
       "      <td>134.725568</td>\n",
       "      <td>9957.222175</td>\n",
       "      <td>363.735379</td>\n",
       "      <td>153.543409</td>\n",
       "      <td>200.162975</td>\n",
       "      <td>291.846514</td>\n",
       "      <td>86.723412</td>\n",
       "      <td>87.065270</td>\n",
       "      <td>...</td>\n",
       "      <td>0.309900</td>\n",
       "      <td>3.151286e+02</td>\n",
       "      <td>4.404643e+02</td>\n",
       "      <td>3.811021e+02</td>\n",
       "      <td>24.708030</td>\n",
       "      <td>58.339468</td>\n",
       "      <td>35.485643</td>\n",
       "      <td>99.058760</td>\n",
       "      <td>155.578153</td>\n",
       "      <td>139.814706</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.462692e+05</td>\n",
       "      <td>4.756507e+06</td>\n",
       "      <td>245.779822</td>\n",
       "      <td>4884.960969</td>\n",
       "      <td>158.688653</td>\n",
       "      <td>12.443013</td>\n",
       "      <td>40.562461</td>\n",
       "      <td>102.062730</td>\n",
       "      <td>2.987328</td>\n",
       "      <td>314.131694</td>\n",
       "      <td>...</td>\n",
       "      <td>2.632181</td>\n",
       "      <td>9.494045e+03</td>\n",
       "      <td>1.064843e+04</td>\n",
       "      <td>1.039556e+04</td>\n",
       "      <td>842.913287</td>\n",
       "      <td>990.361078</td>\n",
       "      <td>904.093921</td>\n",
       "      <td>2436.074522</td>\n",
       "      <td>4544.303974</td>\n",
       "      <td>4493.728267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>3.663549e+06</td>\n",
       "      <td>1.840322e+07</td>\n",
       "      <td>0.018000</td>\n",
       "      <td>1001.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>3.790222e+06</td>\n",
       "      <td>2.277154e+07</td>\n",
       "      <td>40.000000</td>\n",
       "      <td>6019.000000</td>\n",
       "      <td>207.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>204.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.916894e+06</td>\n",
       "      <td>2.720466e+07</td>\n",
       "      <td>67.950000</td>\n",
       "      <td>9803.000000</td>\n",
       "      <td>369.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>226.000000</td>\n",
       "      <td>299.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>4.043566e+06</td>\n",
       "      <td>3.134856e+07</td>\n",
       "      <td>125.000000</td>\n",
       "      <td>14276.000000</td>\n",
       "      <td>512.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>226.000000</td>\n",
       "      <td>330.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>4.170239e+06</td>\n",
       "      <td>3.421434e+07</td>\n",
       "      <td>10270.000000</td>\n",
       "      <td>18397.000000</td>\n",
       "      <td>600.000000</td>\n",
       "      <td>232.000000</td>\n",
       "      <td>237.000000</td>\n",
       "      <td>540.000000</td>\n",
       "      <td>102.000000</td>\n",
       "      <td>8081.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>106.000000</td>\n",
       "      <td>1.040658e+06</td>\n",
       "      <td>1.040658e+06</td>\n",
       "      <td>1.040658e+06</td>\n",
       "      <td>64800.000000</td>\n",
       "      <td>64800.000000</td>\n",
       "      <td>64800.000000</td>\n",
       "      <td>375000.000000</td>\n",
       "      <td>612500.000000</td>\n",
       "      <td>612500.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 379 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       TransactionID  TransactionDT  TransactionAmt          card1  \\\n",
       "count   5.066910e+05   5.066910e+05   506691.000000  506691.000000   \n",
       "mean    3.916894e+06   2.692994e+07      134.725568    9957.222175   \n",
       "std     1.462692e+05   4.756507e+06      245.779822    4884.960969   \n",
       "min     3.663549e+06   1.840322e+07        0.018000    1001.000000   \n",
       "25%     3.790222e+06   2.277154e+07       40.000000    6019.000000   \n",
       "50%     3.916894e+06   2.720466e+07       67.950000    9803.000000   \n",
       "75%     4.043566e+06   3.134856e+07      125.000000   14276.000000   \n",
       "max     4.170239e+06   3.421434e+07    10270.000000   18397.000000   \n",
       "\n",
       "               card2          card3          card5          addr1  \\\n",
       "count  498037.000000  503689.000000  502144.000000  441082.000000   \n",
       "mean      363.735379     153.543409     200.162975     291.846514   \n",
       "std       158.688653      12.443013      40.562461     102.062730   \n",
       "min       100.000000     100.000000     100.000000     100.000000   \n",
       "25%       207.000000     150.000000     166.000000     204.000000   \n",
       "50%       369.000000     150.000000     226.000000     299.000000   \n",
       "75%       512.000000     150.000000     226.000000     330.000000   \n",
       "max       600.000000     232.000000     237.000000     540.000000   \n",
       "\n",
       "               addr2          dist1  ...          V330          V331  \\\n",
       "count  441082.000000  215474.000000  ...  76431.000000  7.643100e+04   \n",
       "mean       86.723412      87.065270  ...      0.309900  3.151286e+02   \n",
       "std         2.987328     314.131694  ...      2.632181  9.494045e+03   \n",
       "min        10.000000       0.000000  ...      0.000000  0.000000e+00   \n",
       "25%        87.000000       3.000000  ...      0.000000  0.000000e+00   \n",
       "50%        87.000000       8.000000  ...      0.000000  0.000000e+00   \n",
       "75%        87.000000      20.000000  ...      0.000000  0.000000e+00   \n",
       "max       102.000000    8081.000000  ...    106.000000  1.040658e+06   \n",
       "\n",
       "               V332          V333          V334          V335          V336  \\\n",
       "count  7.643100e+04  7.643100e+04  76431.000000  76431.000000  76431.000000   \n",
       "mean   4.404643e+02  3.811021e+02     24.708030     58.339468     35.485643   \n",
       "std    1.064843e+04  1.039556e+04    842.913287    990.361078    904.093921   \n",
       "min    0.000000e+00  0.000000e+00      0.000000      0.000000      0.000000   \n",
       "25%    0.000000e+00  0.000000e+00      0.000000      0.000000      0.000000   \n",
       "50%    0.000000e+00  0.000000e+00      0.000000      0.000000      0.000000   \n",
       "75%    0.000000e+00  0.000000e+00      0.000000      0.000000      0.000000   \n",
       "max    1.040658e+06  1.040658e+06  64800.000000  64800.000000  64800.000000   \n",
       "\n",
       "                V337           V338           V339  \n",
       "count   76431.000000   76431.000000   76431.000000  \n",
       "mean       99.058760     155.578153     139.814706  \n",
       "std      2436.074522    4544.303974    4493.728267  \n",
       "min         0.000000       0.000000       0.000000  \n",
       "25%         0.000000       0.000000       0.000000  \n",
       "50%         0.000000       0.000000       0.000000  \n",
       "75%         0.000000       0.000000       0.000000  \n",
       "max    375000.000000  612500.000000  612500.000000  \n",
       "\n",
       "[8 rows x 379 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_transaction.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 141907 entries, 0 to 141906\n",
      "Data columns (total 41 columns):\n",
      " #   Column         Non-Null Count   Dtype  \n",
      "---  ------         --------------   -----  \n",
      " 0   TransactionID  141907 non-null  int64  \n",
      " 1   id-01          141907 non-null  float64\n",
      " 2   id-02          136976 non-null  float64\n",
      " 3   id-03          66481 non-null   float64\n",
      " 4   id-04          66481 non-null   float64\n",
      " 5   id-05          134750 non-null  float64\n",
      " 6   id-06          134750 non-null  float64\n",
      " 7   id-07          5059 non-null    float64\n",
      " 8   id-08          5059 non-null    float64\n",
      " 9   id-09          74338 non-null   float64\n",
      " 10  id-10          74338 non-null   float64\n",
      " 11  id-11          136778 non-null  float64\n",
      " 12  id-12          141907 non-null  object \n",
      " 13  id-13          130286 non-null  float64\n",
      " 14  id-14          71357 non-null   float64\n",
      " 15  id-15          136977 non-null  object \n",
      " 16  id-16          125747 non-null  object \n",
      " 17  id-17          135966 non-null  float64\n",
      " 18  id-18          50875 non-null   float64\n",
      " 19  id-19          135906 non-null  float64\n",
      " 20  id-20          135633 non-null  float64\n",
      " 21  id-21          5059 non-null    float64\n",
      " 22  id-22          5062 non-null    float64\n",
      " 23  id-23          5062 non-null    object \n",
      " 24  id-24          4740 non-null    float64\n",
      " 25  id-25          5039 non-null    float64\n",
      " 26  id-26          5047 non-null    float64\n",
      " 27  id-27          5062 non-null    object \n",
      " 28  id-28          136778 non-null  object \n",
      " 29  id-29          136778 non-null  object \n",
      " 30  id-30          70659 non-null   object \n",
      " 31  id-31          136625 non-null  object \n",
      " 32  id-32          70671 non-null   float64\n",
      " 33  id-33          70671 non-null   object \n",
      " 34  id-34          72175 non-null   object \n",
      " 35  id-35          136977 non-null  object \n",
      " 36  id-36          136977 non-null  object \n",
      " 37  id-37          136977 non-null  object \n",
      " 38  id-38          136977 non-null  object \n",
      " 39  DeviceType     136931 non-null  object \n",
      " 40  DeviceInfo     115057 non-null  object \n",
      "dtypes: float64(23), int64(1), object(17)\n",
      "memory usage: 44.4+ MB\n"
     ]
    }
   ],
   "source": [
    "test_identity.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>TransactionID</th>\n",
       "      <th>id-01</th>\n",
       "      <th>id-02</th>\n",
       "      <th>id-03</th>\n",
       "      <th>id-04</th>\n",
       "      <th>id-05</th>\n",
       "      <th>id-06</th>\n",
       "      <th>id-07</th>\n",
       "      <th>id-08</th>\n",
       "      <th>id-09</th>\n",
       "      <th>...</th>\n",
       "      <th>id-17</th>\n",
       "      <th>id-18</th>\n",
       "      <th>id-19</th>\n",
       "      <th>id-20</th>\n",
       "      <th>id-21</th>\n",
       "      <th>id-22</th>\n",
       "      <th>id-24</th>\n",
       "      <th>id-25</th>\n",
       "      <th>id-26</th>\n",
       "      <th>id-32</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1.419070e+05</td>\n",
       "      <td>141907.000000</td>\n",
       "      <td>136976.000000</td>\n",
       "      <td>66481.000000</td>\n",
       "      <td>66481.000000</td>\n",
       "      <td>134750.000000</td>\n",
       "      <td>134750.000000</td>\n",
       "      <td>5059.000000</td>\n",
       "      <td>5059.000000</td>\n",
       "      <td>74338.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>135966.000000</td>\n",
       "      <td>50875.000000</td>\n",
       "      <td>135906.000000</td>\n",
       "      <td>135633.000000</td>\n",
       "      <td>5059.000000</td>\n",
       "      <td>5062.000000</td>\n",
       "      <td>4740.000000</td>\n",
       "      <td>5039.000000</td>\n",
       "      <td>5047.000000</td>\n",
       "      <td>70671.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.972166e+06</td>\n",
       "      <td>-11.325734</td>\n",
       "      <td>192658.729909</td>\n",
       "      <td>0.053008</td>\n",
       "      <td>-0.087454</td>\n",
       "      <td>1.246033</td>\n",
       "      <td>-6.803829</td>\n",
       "      <td>12.493180</td>\n",
       "      <td>-36.577782</td>\n",
       "      <td>0.076219</td>\n",
       "      <td>...</td>\n",
       "      <td>191.070341</td>\n",
       "      <td>14.795735</td>\n",
       "      <td>350.122982</td>\n",
       "      <td>408.886230</td>\n",
       "      <td>507.727021</td>\n",
       "      <td>15.336823</td>\n",
       "      <td>13.166667</td>\n",
       "      <td>332.043064</td>\n",
       "      <td>152.752923</td>\n",
       "      <td>26.217939</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.469966e+05</td>\n",
       "      <td>14.508520</td>\n",
       "      <td>182613.277215</td>\n",
       "      <td>0.684551</td>\n",
       "      <td>0.840351</td>\n",
       "      <td>5.071394</td>\n",
       "      <td>15.921457</td>\n",
       "      <td>11.678206</td>\n",
       "      <td>25.544185</td>\n",
       "      <td>1.009687</td>\n",
       "      <td>...</td>\n",
       "      <td>30.749535</td>\n",
       "      <td>2.318496</td>\n",
       "      <td>139.140824</td>\n",
       "      <td>158.971756</td>\n",
       "      <td>227.371061</td>\n",
       "      <td>5.618032</td>\n",
       "      <td>3.222440</td>\n",
       "      <td>86.356683</td>\n",
       "      <td>31.916995</td>\n",
       "      <td>3.601046</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>3.663586e+06</td>\n",
       "      <td>-100.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>-12.000000</td>\n",
       "      <td>-19.000000</td>\n",
       "      <td>-81.000000</td>\n",
       "      <td>-100.000000</td>\n",
       "      <td>-41.000000</td>\n",
       "      <td>-100.000000</td>\n",
       "      <td>-32.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>8.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>3.859268e+06</td>\n",
       "      <td>-12.500000</td>\n",
       "      <td>63339.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-6.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>-46.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>13.000000</td>\n",
       "      <td>266.000000</td>\n",
       "      <td>256.000000</td>\n",
       "      <td>252.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>321.000000</td>\n",
       "      <td>137.000000</td>\n",
       "      <td>24.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.001774e+06</td>\n",
       "      <td>-5.000000</td>\n",
       "      <td>133189.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>-33.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>321.000000</td>\n",
       "      <td>484.000000</td>\n",
       "      <td>576.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>321.000000</td>\n",
       "      <td>147.000000</td>\n",
       "      <td>24.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>4.105284e+06</td>\n",
       "      <td>-5.000000</td>\n",
       "      <td>265717.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>-23.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>225.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>427.000000</td>\n",
       "      <td>549.000000</td>\n",
       "      <td>711.000000</td>\n",
       "      <td>14.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>355.000000</td>\n",
       "      <td>182.000000</td>\n",
       "      <td>32.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>4.170239e+06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>999869.000000</td>\n",
       "      <td>11.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>16.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>228.000000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>660.000000</td>\n",
       "      <td>854.000000</td>\n",
       "      <td>44.000000</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>549.000000</td>\n",
       "      <td>216.000000</td>\n",
       "      <td>48.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       TransactionID          id-01          id-02         id-03  \\\n",
       "count   1.419070e+05  141907.000000  136976.000000  66481.000000   \n",
       "mean    3.972166e+06     -11.325734  192658.729909      0.053008   \n",
       "std     1.469966e+05      14.508520  182613.277215      0.684551   \n",
       "min     3.663586e+06    -100.000000       2.000000    -12.000000   \n",
       "25%     3.859268e+06     -12.500000   63339.500000      0.000000   \n",
       "50%     4.001774e+06      -5.000000  133189.500000      0.000000   \n",
       "75%     4.105284e+06      -5.000000  265717.500000      0.000000   \n",
       "max     4.170239e+06       0.000000  999869.000000     11.000000   \n",
       "\n",
       "              id-04          id-05          id-06        id-07        id-08  \\\n",
       "count  66481.000000  134750.000000  134750.000000  5059.000000  5059.000000   \n",
       "mean      -0.087454       1.246033      -6.803829    12.493180   -36.577782   \n",
       "std        0.840351       5.071394      15.921457    11.678206    25.544185   \n",
       "min      -19.000000     -81.000000    -100.000000   -41.000000  -100.000000   \n",
       "25%        0.000000       0.000000      -6.000000     3.000000   -46.000000   \n",
       "50%        0.000000       0.000000       0.000000    12.000000   -33.000000   \n",
       "75%        0.000000       1.000000       0.000000    21.000000   -23.000000   \n",
       "max        0.000000      52.000000       0.000000    59.000000     0.000000   \n",
       "\n",
       "              id-09  ...          id-17         id-18          id-19  \\\n",
       "count  74338.000000  ...  135966.000000  50875.000000  135906.000000   \n",
       "mean       0.076219  ...     191.070341     14.795735     350.122982   \n",
       "std        1.009687  ...      30.749535      2.318496     139.140824   \n",
       "min      -32.000000  ...     100.000000     11.000000     100.000000   \n",
       "25%        0.000000  ...     166.000000     13.000000     266.000000   \n",
       "50%        0.000000  ...     166.000000     15.000000     321.000000   \n",
       "75%        0.000000  ...     225.000000     15.000000     427.000000   \n",
       "max       16.000000  ...     228.000000     29.000000     670.000000   \n",
       "\n",
       "               id-20        id-21        id-22        id-24        id-25  \\\n",
       "count  135633.000000  5059.000000  5062.000000  4740.000000  5039.000000   \n",
       "mean      408.886230   507.727021    15.336823    13.166667   332.043064   \n",
       "std       158.971756   227.371061     5.618032     3.222440    86.356683   \n",
       "min       100.000000   100.000000    11.000000    10.000000   100.000000   \n",
       "25%       256.000000   252.000000    14.000000    11.000000   321.000000   \n",
       "50%       484.000000   576.000000    14.000000    11.000000   321.000000   \n",
       "75%       549.000000   711.000000    14.000000    15.000000   355.000000   \n",
       "max       660.000000   854.000000    44.000000    26.000000   549.000000   \n",
       "\n",
       "             id-26         id-32  \n",
       "count  5047.000000  70671.000000  \n",
       "mean    152.752923     26.217939  \n",
       "std      31.916995      3.601046  \n",
       "min     100.000000      8.000000  \n",
       "25%     137.000000     24.000000  \n",
       "50%     147.000000     24.000000  \n",
       "75%     182.000000     32.000000  \n",
       "max     216.000000     48.000000  \n",
       "\n",
       "[8 rows x 24 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_identity.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "TransactionID         0\n",
       "id-01                 0\n",
       "id-02              4931\n",
       "id-03             75426\n",
       "id-04             75426\n",
       "id-05              7157\n",
       "id-06              7157\n",
       "id-07            136848\n",
       "id-08            136848\n",
       "id-09             67569\n",
       "id-10             67569\n",
       "id-11              5129\n",
       "id-12                 0\n",
       "id-13             11621\n",
       "id-14             70550\n",
       "id-15              4930\n",
       "id-16             16160\n",
       "id-17              5941\n",
       "id-18             91032\n",
       "id-19              6001\n",
       "id-20              6274\n",
       "id-21            136848\n",
       "id-22            136845\n",
       "id-23            136845\n",
       "id-24            137167\n",
       "id-25            136868\n",
       "id-26            136860\n",
       "id-27            136845\n",
       "id-28              5129\n",
       "id-29              5129\n",
       "id-30             71248\n",
       "id-31              5282\n",
       "id-32             71236\n",
       "id-33             71236\n",
       "id-34             69732\n",
       "id-35              4930\n",
       "id-36              4930\n",
       "id-37              4930\n",
       "id-38              4930\n",
       "DeviceType         4976\n",
       "DeviceInfo        26850\n",
       "dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_identity.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 根据 TransactionID 合并 train_transaction 和 train_identity，test_transaction 和 test_identity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_transaction与train_identity基于TransactionID相关联的数据量 :  144233\n",
      "相关联数据量占整个train_transaction数据量的比例是 : 24.42%\n"
     ]
    }
   ],
   "source": [
    "# 根据以上数据的shape，可以发现，并非所有的transaction都有相关联的identity\n",
    "# 计算一下占比\n",
    "train_count = np.sum(train_transaction['TransactionID'].isin(train_identity['TransactionID']))\n",
    "print(\"train_transaction与train_identity基于TransactionID相关联的数据量 : \", train_count)\n",
    "\n",
    "train_ratio = train_count / len(train_transaction)\n",
    "print(\"相关联数据量占整个train_transaction数据量的比例是 : {:.2f}%\".format(train_ratio * 100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test_transaction与test_identity基于TransactionID相关联的数据量 :  141907\n",
      "相关联数据量占整个test_transaction数据量的比例是 : 28.01%\n"
     ]
    }
   ],
   "source": [
    "test_count = np.sum(test_transaction['TransactionID'].isin(test_identity['TransactionID']))\n",
    "print(\"test_transaction与test_identity基于TransactionID相关联的数据量 : \", test_count)\n",
    "\n",
    "test_ratio = test_count / len(test_transaction)\n",
    "print(\"相关联数据量占整个test_transaction数据量的比例是 : {:.2f}%\".format(test_ratio * 100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.merge(train_transaction, train_identity, on='TransactionID', how='left')\n",
    "test = pd.merge(test_transaction, test_identity, on='TransactionID', how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(590540, 434)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506691, 433)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据集EDA（数据探索分析）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 在train_transaction中，正负样本比例\n",
    "sns.countplot('isFraud', data=train)\n",
    "plt.title(\"Normal VS Fraud\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':'Distribution of Transaction Amount'}, ylabel='Frequency'>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 交易金额分布\n",
    "train['TransactionAmt'].apply(np.log).plot(kind='hist', bins=100, figsize=(15, 5), title='Distribution of Transaction Amount')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x432 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 交易金额（正常 vs 欺诈）分布\n",
    "fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 6)) # 画布大小\n",
    "\n",
    "train.loc[train['isFraud']==1]['TransactionAmt'].apply(np.log).plot(kind='hist',\n",
    "                                                                    bins=100,\n",
    "                                                                    title='Log Transaction Amount isFraud = 1',\n",
    "                                                                    ax=ax1)\n",
    "\n",
    "train.loc[train['isFraud']==1]['TransactionAmt'].plot(kind='hist',\n",
    "                                                      bins=100,\n",
    "                                                      title='Transaction Amount isFraud=1',\n",
    "                                                      ax=ax2)\n",
    "\n",
    "train.loc[train['isFraud']==0]['TransactionAmt'].apply(np.log).plot(kind='hist',\n",
    "                                                                    bins=100,\n",
    "                                                                    title='Log Transaction Amount isFraud = 0',\n",
    "                                                                    ax=ax3)\n",
    "\n",
    "train.loc[train['isFraud']==0]['TransactionAmt'].plot(kind='hist',\n",
    "                                                      bins=100,\n",
    "                                                      title='Transaction Amount isFraud=0',\n",
    "                                                      ax=ax4)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3IAAAF1CAYAAACtTdhwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAa2ElEQVR4nO3de7RtZ1kf4N9LDiRgSAJJhCQEjkBULoEIRyFYLaAokCDYKqK0ErRmoHQAA2oNpRYdbeU4rCAXwZEhCIoFhog2EC2CoCDXnkDIIWJISIOQcAshhwQokvD2jzU3Y+W4b+ey9t7fzvOMMcde85uX7117f0nWL9+cc1V3BwAAgHHcZrMLAAAA4MAIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ6Ahaqqv6mqf7fZdWxHVfV7VfWrm10HABtPkAMgVXVVVX2tqm6sqs9V1aur6ujNrmtJVT28qj69TPt3VtWfVNW1VbWvqi6pqmdX1RFVtbOqenpPS+/rLVX1qBX6uPvcvjdOx35lbv0HFv9OV1ZV51TV3823dffTuvu/Hu5zz42HG6rq+qp6b1U9rap8bgDYIvwLGYAlj+vuo5M8KMmuJP95/x2qaseGV7WCqrpXkg8k+VSS07v72CQ/mVntd5zb9bjpfT0wyduS/FlVnbP/+br7H7v76KVlan7gXNu75/reMr+HBXpcd98xyT2S7E7yK0leubklAbBEkAPgFrr76iR/meT+STLNTD29qi5PcvnU9gtVdUVVXVdVF1TVyUvHV9WjquofphmylyWpuW2/VlWvnVtfmjXbMa3fuar+oKquqaovVdWfV9W3TfWcPDc7dnKSX0/y3u5+dnd/Zqr9su7+me6+fpn39dnufnGSX0vymwcyuzTNWL2nql5UVV9M8mtVda+qekdVfXGaEfzjqjpu7pirquo/TLOE+6rqDVV11LTthGl28Prpd/jupXqq6tSqelNVfWE698uq6j5Jfi/JmdP7v37a99VV9d/m+lzt79LTrNrlU7+/W1Xf+tuspLv3dfcFSX4qyVOq6v7r/b0BsDiCHAC3UFWnJnlskg/PNT8hyUOS3LeqHpnkBUmemOSkJJ9M8vrp2BOSvCmz2bwTknwiyfcfQPd/lOQOSe6X5NuTvKi7v5LkMUmumZsduybJDyd540G8xTdN5/6uAzzuIUmuTHKXJP89s4D6giQnJ7lPklMzC4nznpjk0Um+I8kDkpwztT8nyaeTnDid7z8l6ao6IslbMvud7kxySpLXd/fHkjwtyfum93/c/sWt9neZc3aS751qeWKSH13vm+/uD041b+olpgDM3BouDQFgff68qm5Ksi/JhUl+Y27bC7r7uiSpqicneVV3f2haf26SL1XVziQ/mOTS7n7jtO13Mgsta6qqkzILbMd395em5r9d5ZDjk3xmfW/tFq6Zft75QI/r7pdOr29KcsW0JMkXquqFSZ6/3zEvmUJnqurNSc6Y2r+RWdi6R3dfkeTd0z7fl1kw/OXuvmna9xb3xa1ixb9Ld1817bN7mq28vqreOdXzv9d5/mT2uzvQ3xsAC2BGDoAlT+ju47r7Ht39S939tbltn5p7fXJmsz1Jku6+MckXM5s9Onl+3+7u/Y5dzalJrpsLcWv5YmZh6ECdMv287gCPu8X7qKq7VNXrq+rqqvpyktdmNgs577Nzr7+aZOneu9/KLAT+VVVdWVXnTe2nJvnkXIg7EKv9XdaqZ71OyYH/3gBYAEEOgPXoudfXZPYAjCTJdA/b8UmuzmyG7NS5bTW/nuQrmV06ueSuc68/leTO8/eZrdD/krcn+dfrK/8WfjzJ55NcdoDH7V/Db0xtp3f3MUn+TebuB1z1RN03dPdzuvueSX4sybOr6ocy+x3cfYWHqSz3O5i32t/lkFXV92YW5NY7QwjAAglyAByo1yV5alWdUVVHZhZoPjBdvndhkvtV1b+awsgzcsuwdnGSH6zZo/6PTfLcpQ3TA0v+MsnLq+pOVXXbqvrBafPnkhw/HbPk+UkeVlW/VVV3TZKqundVvXa5MDjNoP376bjndvc3D/H3cMckNybZV1WnJPnl9R5YVWdPtVZml7LenOSbST6YWRjeXVXfVlVHVdXSPYafS3K3qrrdCqdd7e9y0KrqmKo6O7P77V7b3XsP5XwAHB6CHAAHpLvfnuRXk/xpZqHjXkmeNG27NrOvANid2WV9pyV5z9yxb0vyhiSXJLkoswd7zPu3md0/9g+ZzZo9azruHzILKldOT1w8ubs/keTMzB4KcmlV7Ztq2pPkhrlzXl9VX0myN7OHuPxkd7/qMPwqfj2zr2pYuqfwTQdw7GmZzSjemOR9SV7e3e/s7puTPC7JvZP8Y2YPF/mp6Zh3JLk0yWer6tr9T7ja3+UgvbmqbshslvB5SV6Y5KmHcD4ADqOa3b4AAADAKMzIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGCW+8LRLeGEE07onTt3bnYZAAAAm+Kiiy66trtPXG7blg1yO3fuzJ49eza7DAAAgE1RVZ9caZtLKwEAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYHZsdgEr2Xv1vuw878LNLgMAANimrtp91maXcNDMyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMAsLclX1oqp61tz6W6vq9+fWf7uqnr2o/gEAALarRc7IvSfJw5Kkqm6T5IQk95vb/rAk711g/wAAANvSIoPce5OcOb2+X5KPJrmhqu5UVUcmuU+SDy2wfwAAgG1px6JO3N3XVNVNVXX3zGbf3pfklMzC3b4ke7v7n+aPqapzk5ybJEccc+KiSgMAABjaoh928t7MQtxSkHvf3Pp79t+5u8/v7l3dveuIOxy74NIAAADGtOggt3Sf3OmZXVr5/sxm5NwfBwAAcJA2Ykbu7CTXdffN3X1dkuMyC3OCHAAAwEFYdJDbm9nTKt+/X9u+7r52wX0DAABsSwt72EmSdPfNSY7Zr+2cRfYJAACw3S16Rg4AAIDDTJADAAAYjCAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMJgdm13ASk4/5djs2X3WZpcBAACw5ZiRAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIMR5AAAAAazY7MLWMneq/dl53kXHtZzXrX7rMN6PgAAgM1gRg4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAg9mwIFdVz6uqS6vqkqq6uKoeslF9AwAAbCc7NqKTqjozydlJHtTdX6+qE5LcbiP6BgAA2G42JMglOSnJtd399STp7ms3qF8AAIBtZ6MurfyrJKdW1cer6uVV9S+X26mqzq2qPVW15+av7tug0gAAAMayIUGuu29M8uAk5yb5QpI3VNU5y+x3fnfv6u5dR9zh2I0oDQAAYDgbdWlluvvmJH+T5G+qam+SpyR59Ub1DwAAsF1syIxcVX1XVZ0213RGkk9uRN8AAADbzUbNyB2d5KVVdVySm5JckdlllgAAABygDQly3X1RkodtRF8AAADb3YZ9ITgAAACHhyAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDA7NruAlZx+yrHZs/uszS4DAABgyzEjBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMJg1g1xVPaKq3lRVl07LG6vq4YsvDQAAgOWsGuSq6qwkr0ry5iQ/k+TJSf4iyauq6rGLLw8AAID97Vhj+y8neUJ3f2Su7eKq2pPkpZmFOgAAADbQWpdW3nW/EJck6e5LktxlMSUBAACwmrWC3FcOchsAAAALstallfeqqguWaa8k91xAPQAAAKxhrSD3+FW2/Y/DWcj+9l69LzvPu3CRXQzlqt1nbXYJAADAFrFWkPv7JCd299/PN1bVfZN8YWFVAQAAsKK17pF7aZITlmk/PsmLD385AAAArGWtIHfv7n7X/o3d/e4kD1hMSQAAAKxmrSB3x1W23fZwFgIAAMD6rBXkrqiqx+7fWFWPSXLlYkoCAABgNWs97ORZSS6sqicmuWhq25XkzCRnL7AuAAAAVrDqjFx3X57k9CR/m2TntPxtkgd098cXXRwAAAD/3Fozcunur1fVd3f3c+bbq+o3u/tXFlcaAAAAy1nrHrklj1qm7TGHsxAAAADWZ9UZuar6xSS/lOReVXXJ3KY7JnnvIgsDAABgeWtdWvk/k/xlkhckOW+u/Ybuvm5hVQEAALCitR52sq+7r0ry4iTXdfcnu/uTSW6qqodsRIEAAADc0nrvkXtFkhvn1m+c2talqm6uqour6qNV9eaqOu4AagQAAGDOeoNcdXcvrXT3N7OOJ17O+Vp3n9Hd909yXZKnH8CxAAAAzFlvkLuyqp5RVbedlmcmufIg+3xfklMO8lgAAIBbvfUGuacleViSq5N8OslDkpx7oJ1V1RFJfijJBQd6LAAAADPrujyyuz+f5EmH0M/tq+rizGbiPpbkbcvtVFXnZgqIRxxz4iF0BwAAsH2tK8hV1R8k6f3bu/vn1tnP17r7jKq6Q5K3ZnaP3EuWOd/5Sc5PkiNPOu2f9QcAAMD6H1jylrnXRyX58STXHGhn3f3VqnpGkj+vqpd3900Heg4AAIBbu/VeWvmn8+tV9bokf3cwHXb3h6vqkiQ/neSPDuYcAAAAt2YH8hUC805L8u3r3bm7j95v/XEH2S8AAMCt3nrvkbshs3vkavr52SS/ssC6AAAAWMF6L62846ILAQAAYH1WDXJV9aDVtnf3hw5vOQAAAKxlrRm5355+HpVkV5KPZHZ55QOS7Ely5uJKAwAAYDm3WW1jdz+iux+R5DNJHtTdu7r7wUm+J8nVG1EgAAAAt7RqkJvzXd29d2mluz+a5D6LKQkAAIDVrPfrBy6pqt9P8tpp/clJLllMSQAAAKxmvUHuqUl+Mckzp/V3JXnFQioCAABgVev9+oH/V1W/m+TtmX2P3GXd/Y2FVgYAAMCy1vuF4A9P8pokV2X21MpTq+op3f2uhVUGAADAstZ7aeVvJ/mR7r4sSarqO5O8LsmDF1UYAAAAy1tvkLvtUohLku7+eFXddkE1JUlOP+XY7Nl91iK7AAAAGNJ6g9xFyzy1cs9iSgIAAGA16w1yT0vy9CTPmNbfneTlC6kIAACAVa0Z5KrqiCQf6e7vTvLCxZcEAADAam6z1g7dfXOSy6rq7htQDwAAAGtY76WVd0pyaVV9MMlXlhq7+8cWUhUAAAArWm+Q+9WFVgEAAMC6rRrkquqozB50cu8ke5O8srtv2ojCAAAAWN5a98i9JsmuzELcYzL7YnAAAAA20VqXVt63u09Pkqp6ZZIPLr4kAAAAVrPWjNw3ll64pBIAAGBrWGtG7oFV9eXpdSW5/bReSbq7j1lodQAAAPwzqwa57j5iowoBAABgfdb8QnAAAAC2FkEOAABgMIIcAADAYAQ5AACAwQhyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDB7NjsAlay9+p92XnehZtdxoa5avdZm10CAAAwCDNyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABjMhgS5qrpxv/VzquplG9E3AADAdmNGDgAAYDCCHAAAwGB2bFA/t6+qi+fW75zkgv13qqpzk5ybJEccc+LGVAYAADCYjQpyX+vuM5ZWquqcJLv236m7z09yfpIcedJpvUG1AQAADMWllQAAAIMR5AAAAAYjyAEAAAxmQ+6R6+6j91t/dZJXb0TfAAAA240ZOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACD2bHZBazk9FOOzZ7dZ212GQAAAFuOGTkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYHZsdgEr2Xv1vuw878LNLoMNctXusza7BAAAGIYZOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMZsOCXFXdtapeX1WfqKqLquovquo7N6p/AACA7WLHRnRSVZXkz5K8prufNLU9MMldknx8I2oAAADYLjYkyCV5RJJvdPfvLTV090c2qG8AAIBtZaMurbx/kovW2qmqzq2qPVW15+av7tuAsgAAAMazpR520t3nd/eu7t51xB2O3exyAAAAtqSNCnKXJnnwBvUFAACwrW1UkHtHkiOr6tylhqp6QFX9wAb1DwAAsG1sSJDr7k7y40l+ePr6gUuTvCDJZzeifwAAgO1ko55ame6+JskTN6o/AACA7WpLPewEAACAtQlyAAAAgxHkAAAABiPIAQAADEaQAwAAGIwgBwAAMBhBDgAAYDCCHAAAwGAEOQAAgMEIcgAAAIPZsdkFrOT0U47Nnt1nbXYZAAAAW44ZOQAAgMEIcgAAAIMR5AAAAAYjyAEAAAxGkAMAABiMIAcAADAYQQ4AAGAwghwAAMBgBDkAAIDBCHIAAACDEeQAAAAGI8gBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYKq7N7uGZVXVDUku2+w64DA6Icm1m10EHGbGNduNMc12Y0yP7R7dfeJyG3ZsdCUH4LLu3rXZRcDhUlV7jGm2G+Oa7caYZrsxprcvl1YCAAAMRpADAAAYzFYOcudvdgFwmBnTbEfGNduNMc12Y0xvU1v2YScAAAAsbyvPyAEAALCMLRnkqurRVXVZVV1RVedtdj1QVa+qqs9X1Ufn2u5cVW+rqsunn3ea2quqXjKN30uq6kFzxzxl2v/yqnrKXPuDq2rvdMxLqqpW6wMOVVWdWlXvrKq/r6pLq+qZU7txzZCq6qiq+mBVfWQa078+tX9HVX1gGodvqKrbTe1HTutXTNt3zp3ruVP7ZVX1o3Pty34+WakPOByq6oiq+nBVvWVaN6ZJsgWDXFUdkeR3kzwmyX2T/HRV3Xdzq4K8Osmj92s7L8lfd/dpSf56Wk9mY/e0aTk3ySuS2YfXJM9P8pAk35fk+XMfYF+R5Bfmjnv0Gn3AobopyXO6+75JHprk6dO/a41rRvX1JI/s7gcmOSPJo6vqoUl+M8mLuvveSb6U5Oen/X8+yZem9hdN+2X65+BJSe6X2Zh9+fRBerXPJyv1AYfDM5N8bG7dmCbJFgxymX0QuKK7r+zuf0ry+iSP3+SauJXr7ncluW6/5scnec30+jVJnjDX/oc98/4kx1XVSUl+NMnbuvu67v5Skrdl9kHjpCTHdPf7e3bT6h/ud67l+oBD0t2f6e4PTa9vyOxDwikxrhnUNDZvnFZvOy2d5JFJ3ji17z+ml8bhG5P80DRr/Pgkr+/ur3f3/01yRWafTZb9fDIds1IfcEiq6m5Jzkry+9P6auPNmL6V2YpB7pQkn5pb//TUBlvNXbr7M9Przya5y/R6pTG8Wvunl2lfrQ84bKbLb74nyQdiXDOwaZbh4iSfz+x/KnwiyfXdfdO0y/w4/NbYnbbvS3J8DnysH79KH3CofifJf0zyzWl9tfFmTN/KbMUgB8OZZhwW+gjYjeiDW5+qOjrJnyZ5Vnd/eX6bcc1ouvvm7j4jyd0ym2347s2tCA5eVZ2d5PPdfdFm18LWtBWD3NVJTp1bv9vUBlvN56bLxzL9/PzUvtIYXq39bsu0r9YHHLKqum1mIe6Pu/tNU7NxzfC6+/ok70xyZmaXAe+YNs2Pw2+N3Wn7sUm+mAMf619cpQ84FN+f5Meq6qrMLnt8ZJIXx5hmshWD3P9Jctr0tJzbZXZz5gWbXBMs54IkS0/oe0qS/zXX/rM189Ak+6bLyN6a5Eeq6k7TwyB+JMlbp21frqqHTtel/+x+51quDzgk01h7ZZKPdfcL5zYZ1wypqk6squOm17dP8qjM7v18Z5KfmHbbf0wvjcOfSPKOaYb4giRPmp4A+B2ZPajng1nh88l0zEp9wEHr7ud29926e2dm4+0d3f3kGNMs6e4ttyR5bJKPZ3Zt+/M2ux6LJcnrknwmyTcyu1b85zO7hvyvk1ye5O1J7jztW5k9BeoTSfYm2TV3np/L7CbjK5I8da59V5KPTse8LElN7cv2YbEc6pLkX2R2SeMlSS6elsca15ZRlyQPSPLhaUx/NMl/mdrvmdmH1iuS/EmSI6f2o6b1K6bt95w71/OmcXtZksfMtS/7+WSlPiyWw7UkeXiSt0yvjWlLuvtb/1EFAABgEFvx0koAAABWIcgBAAAMRpADAAAYjCAHAAAwGEEOAABgMIIcAADAYAQ5AACAwQhyAAAAg/n/2cW8LL8FV84AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1080x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分析 ProductCD\n",
    "train.groupby('ProductCD')['TransactionID'].count().plot(kind='barh',\n",
    "                                                         figsize=(15, 6),\n",
    "                                                         title='ProductCD TransctionID')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    " train.groupby('ProductCD')['isFraud'].mean().plot(kind='barh',\n",
    "                                                         figsize=(15, 6),\n",
    "                                                         title='ProductCD isFraud')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### # 分类变量进行转换 LabelEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ProductCD\n",
      "card4\n",
      "card6\n",
      "P_emaildomain\n",
      "R_emaildomain\n",
      "M1\n",
      "M2\n",
      "M3\n",
      "M4\n",
      "M5\n",
      "M6\n",
      "M7\n",
      "M8\n",
      "M9\n",
      "id_12\n",
      "id_15\n",
      "id_16\n",
      "id_23\n",
      "id_27\n",
      "id_28\n",
      "id_29\n",
      "id_30\n",
      "id_31\n",
      "id_33\n",
      "id_34\n",
      "id_35\n",
      "id_36\n",
      "id_37\n",
      "id_38\n",
      "DeviceType\n",
      "DeviceInfo\n"
     ]
    }
   ],
   "source": [
    "# 输出 object 类型的列\n",
    "for col in train.columns:\n",
    "    if train[col].dtype == \"object\":\n",
    "        print(col)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 输出 DeviceType 的分布\n",
    "train.groupby(\"DeviceType\").mean()[\"isFraud\"].plot(kind='barh',\n",
    "                                        figsize=(15, 5),\n",
    "                                        title = \"DeviceType Distribution\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 统计每一列的NaN的数量，如果比例超过70%，则删除该列\n",
    "def clean_nan(df):\n",
    "    temp_columns = []\n",
    "    for col in df.columns:\n",
    "        # 获取一列\n",
    "        counter = df[col].isnull().sum()\n",
    "        # 占该列的比例\n",
    "        ratio = counter / len(df[col])\n",
    "        if ratio > 0.7:\n",
    "            # 删除该列\n",
    "            temp_columns.append(col)\n",
    "\n",
    "    # 删除那些列\n",
    "    new_df = df.drop(temp_columns, axis=1)\n",
    "    return new_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始的train shape :  (590540, 434)\n",
      "清洗后的train shape :  (590540, 226)\n"
     ]
    }
   ],
   "source": [
    "print(\"原始的train shape : \", train.shape)\n",
    "train = clean_nan(train)\n",
    "print(\"清洗后的train shape : \", train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始的test shape :  (506691, 433)\n",
      "清洗后的test shape :  (506691, 225)\n"
     ]
    }
   ],
   "source": [
    "print(\"原始的test shape : \", test.shape)\n",
    "test = clean_nan(test)\n",
    "print(\"清洗后的test shape : \", test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def clean_top_cols(df):\n",
    "    new_cols = [col for col in df.columns if df[col].value_counts(dropna=False, normalize=True).values[0] > 0.9]\n",
    "    return new_cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_cols = clean_top_cols(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_cols = clean_top_cols(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "55"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train_cols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "69"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(test_cols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "cols_to_drop = list(set(train_cols + test_cols))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "71"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(cols_to_drop)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'isFraud' in cols_to_drop # 查看标签列是否在其中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "cols_to_drop.remove('isFraud') # 删除标签列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始的train shape :  (590540, 226)\n",
      "清理后的train shape :  (590540, 156)\n"
     ]
    }
   ],
   "source": [
    "# 清理掉这些列\n",
    "print(\"原始的train shape : \", train.shape)\n",
    "train = train.drop(cols_to_drop, axis=1)\n",
    "print(\"清理后的train shape : \", train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始的test shape :  (506691, 225)\n",
      "清理后的test shape :  (506691, 155)\n"
     ]
    }
   ],
   "source": [
    "# 清理掉这些列\n",
    "print(\"原始的test shape : \", test.shape)\n",
    "test = test.drop(cols_to_drop, axis=1)\n",
    "print(\"清理后的test shape : \", test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "isFraud\n"
     ]
    }
   ],
   "source": [
    "for col in train.columns:\n",
    "    if col not in test.columns:\n",
    "        print(col)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a761130755b34c4eab65b80b0eb32c4f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(HTML(value=''), FloatProgress(value=0.0, max=156.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# LabelEncoder\n",
    "\n",
    "for col in tqdm_notebook(train.columns):\n",
    "    if train[col].dtype == \"object\":\n",
    "        encoder = LabelEncoder()\n",
    "        encoder.fit(list(train[col].values) + list(test[col].values))\n",
    "        train[col] = encoder.transform(list(train[col].values))\n",
    "        test[col] = encoder.transform(list(test[col].values))\n",
    "        \n",
    "train = train.reset_index() # 重置索引\n",
    "test = test.reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(590540, 157)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506691, 156)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分离数据集和标签\n",
    "\n",
    "X = train.sort_values('TransactionDT').drop(['isFraud', 'TransactionDT', 'TransactionID'], axis=1)\n",
    "\n",
    "y = train.sort_values('TransactionDT')['isFraud']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(590540, 154)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(590540,)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "# test\n",
    "\n",
    "X_test = test.drop(['TransactionDT', 'TransactionID'], axis=1) # 删除多余的列，不是特征\n",
    "\n",
    "test = test[['TransactionDT', 'TransactionID']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506691, 154)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506691, 2)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "# params 超参数设置\n",
    "\n",
    "params = {'num_leaves': 491, # 叶节点数量\n",
    "          'min_data_in_leaf': 106, # 每个叶子节点中的数据\n",
    "          'objective': 'binary', # 任务：二分类\n",
    "          'max_depth': -1, # -1 ： 不限制深度\n",
    "          \"boosting_type\": \"gbdt\", # 'dart', 'goss', 'rf'\n",
    "          \"metric\": 'auc', # 衡量标准\n",
    "          \"verbosity\" : -1, # 不显示信息\n",
    "          'random_state': 66, # 随机种子\n",
    "         }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建DataFrame保存特征重要性\n",
    "feature_importances = pd.DataFrame(index=None)\n",
    "\n",
    "feature_importances['features'] = X.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>features</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>index</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>TransactionAmt</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ProductCD</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>card1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>card2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>V312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>150</th>\n",
       "      <td>V313</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>V314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>152</th>\n",
       "      <td>V315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>153</th>\n",
       "      <td>V317</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>154 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           features\n",
       "0             index\n",
       "1    TransactionAmt\n",
       "2         ProductCD\n",
       "3             card1\n",
       "4             card2\n",
       "..              ...\n",
       "149            V312\n",
       "150            V313\n",
       "151            V314\n",
       "152            V315\n",
       "153            V317\n",
       "\n",
       "[154 rows x 1 columns]"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5折交叉验证\n",
    "folds = KFold(n_splits=5)\n",
    "\n",
    "splits = folds.split(X, y) # 分割成5份，前4份是训练集索引，最后1份是验证集索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([118108, 118109, 118110, ..., 590537, 590538, 590539]),\n",
       " array([     0,      1,      2, ..., 118105, 118106, 118107]))"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "next(iter(splits)) # 输出的是索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 0 折\n",
      "\n",
      "[1]\tvalidation's auc: 0.837964\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[2]\tvalidation's auc: 0.857038\n",
      "[3]\tvalidation's auc: 0.874131\n",
      "[4]\tvalidation's auc: 0.87959\n",
      "[5]\tvalidation's auc: 0.881985\n",
      "[6]\tvalidation's auc: 0.88422\n",
      "[7]\tvalidation's auc: 0.885251\n",
      "[8]\tvalidation's auc: 0.887934\n",
      "[9]\tvalidation's auc: 0.889501\n",
      "[10]\tvalidation's auc: 0.892001\n",
      "[11]\tvalidation's auc: 0.895664\n",
      "[12]\tvalidation's auc: 0.897139\n",
      "[13]\tvalidation's auc: 0.897977\n",
      "[14]\tvalidation's auc: 0.898092\n",
      "[15]\tvalidation's auc: 0.898943\n",
      "[16]\tvalidation's auc: 0.899843\n",
      "[17]\tvalidation's auc: 0.901197\n",
      "[18]\tvalidation's auc: 0.905897\n",
      "[19]\tvalidation's auc: 0.906642\n",
      "[20]\tvalidation's auc: 0.907274\n",
      "[21]\tvalidation's auc: 0.909835\n",
      "[22]\tvalidation's auc: 0.909991\n",
      "[23]\tvalidation's auc: 0.910338\n",
      "[24]\tvalidation's auc: 0.910913\n",
      "[25]\tvalidation's auc: 0.911114\n",
      "[26]\tvalidation's auc: 0.911657\n",
      "[27]\tvalidation's auc: 0.911381\n",
      "[28]\tvalidation's auc: 0.91135\n",
      "[29]\tvalidation's auc: 0.911215\n",
      "[30]\tvalidation's auc: 0.911471\n",
      "[31]\tvalidation's auc: 0.911172\n",
      "[32]\tvalidation's auc: 0.912273\n",
      "[33]\tvalidation's auc: 0.91298\n",
      "[34]\tvalidation's auc: 0.913798\n",
      "[35]\tvalidation's auc: 0.914163\n",
      "[36]\tvalidation's auc: 0.915823\n",
      "[37]\tvalidation's auc: 0.916393\n",
      "[38]\tvalidation's auc: 0.916783\n",
      "[39]\tvalidation's auc: 0.91704\n",
      "[40]\tvalidation's auc: 0.918004\n",
      "[41]\tvalidation's auc: 0.918666\n",
      "[42]\tvalidation's auc: 0.918922\n",
      "[43]\tvalidation's auc: 0.919291\n",
      "[44]\tvalidation's auc: 0.920156\n",
      "[45]\tvalidation's auc: 0.920309\n",
      "[46]\tvalidation's auc: 0.920919\n",
      "[47]\tvalidation's auc: 0.921565\n",
      "[48]\tvalidation's auc: 0.922011\n",
      "[49]\tvalidation's auc: 0.922534\n",
      "[50]\tvalidation's auc: 0.922068\n",
      "[51]\tvalidation's auc: 0.92247\n",
      "[52]\tvalidation's auc: 0.923044\n",
      "[53]\tvalidation's auc: 0.923094\n",
      "[54]\tvalidation's auc: 0.92344\n",
      "[55]\tvalidation's auc: 0.92362\n",
      "[56]\tvalidation's auc: 0.923614\n",
      "[57]\tvalidation's auc: 0.923337\n",
      "[58]\tvalidation's auc: 0.92348\n",
      "[59]\tvalidation's auc: 0.92356\n",
      "[60]\tvalidation's auc: 0.923798\n",
      "[61]\tvalidation's auc: 0.923908\n",
      "[62]\tvalidation's auc: 0.924549\n",
      "[63]\tvalidation's auc: 0.924812\n",
      "[64]\tvalidation's auc: 0.924452\n",
      "[65]\tvalidation's auc: 0.924341\n",
      "[66]\tvalidation's auc: 0.924779\n",
      "[67]\tvalidation's auc: 0.925287\n",
      "[68]\tvalidation's auc: 0.925429\n",
      "[69]\tvalidation's auc: 0.925684\n",
      "[70]\tvalidation's auc: 0.92599\n",
      "[71]\tvalidation's auc: 0.926064\n",
      "[72]\tvalidation's auc: 0.925815\n",
      "[73]\tvalidation's auc: 0.925959\n",
      "[74]\tvalidation's auc: 0.925986\n",
      "[75]\tvalidation's auc: 0.925884\n",
      "[76]\tvalidation's auc: 0.925985\n",
      "[77]\tvalidation's auc: 0.925982\n",
      "[78]\tvalidation's auc: 0.925869\n",
      "[79]\tvalidation's auc: 0.926016\n",
      "[80]\tvalidation's auc: 0.925902\n",
      "[81]\tvalidation's auc: 0.92618\n",
      "[82]\tvalidation's auc: 0.92654\n",
      "[83]\tvalidation's auc: 0.926497\n",
      "[84]\tvalidation's auc: 0.927043\n",
      "[85]\tvalidation's auc: 0.926869\n",
      "[86]\tvalidation's auc: 0.926784\n",
      "[87]\tvalidation's auc: 0.926928\n",
      "[88]\tvalidation's auc: 0.927082\n",
      "[89]\tvalidation's auc: 0.927061\n",
      "[90]\tvalidation's auc: 0.927257\n",
      "[91]\tvalidation's auc: 0.9275\n",
      "[92]\tvalidation's auc: 0.927434\n",
      "[93]\tvalidation's auc: 0.927535\n",
      "[94]\tvalidation's auc: 0.927488\n",
      "[95]\tvalidation's auc: 0.927921\n",
      "[96]\tvalidation's auc: 0.928089\n",
      "[97]\tvalidation's auc: 0.928122\n",
      "[98]\tvalidation's auc: 0.927989\n",
      "[99]\tvalidation's auc: 0.928044\n",
      "[100]\tvalidation's auc: 0.928189\n",
      "[101]\tvalidation's auc: 0.928199\n",
      "[102]\tvalidation's auc: 0.928267\n",
      "[103]\tvalidation's auc: 0.928351\n",
      "[104]\tvalidation's auc: 0.928397\n",
      "[105]\tvalidation's auc: 0.928502\n",
      "[106]\tvalidation's auc: 0.928673\n",
      "[107]\tvalidation's auc: 0.928743\n",
      "[108]\tvalidation's auc: 0.928752\n",
      "[109]\tvalidation's auc: 0.928681\n",
      "[110]\tvalidation's auc: 0.928695\n",
      "[111]\tvalidation's auc: 0.928726\n",
      "[112]\tvalidation's auc: 0.928721\n",
      "[113]\tvalidation's auc: 0.928705\n",
      "[114]\tvalidation's auc: 0.928489\n",
      "[115]\tvalidation's auc: 0.92851\n",
      "[116]\tvalidation's auc: 0.928537\n",
      "[117]\tvalidation's auc: 0.928357\n",
      "[118]\tvalidation's auc: 0.928149\n",
      "[119]\tvalidation's auc: 0.928167\n",
      "[120]\tvalidation's auc: 0.92812\n",
      "[121]\tvalidation's auc: 0.928096\n",
      "[122]\tvalidation's auc: 0.928313\n",
      "[123]\tvalidation's auc: 0.928257\n",
      "[124]\tvalidation's auc: 0.928114\n",
      "[125]\tvalidation's auc: 0.928185\n",
      "[126]\tvalidation's auc: 0.928292\n",
      "[127]\tvalidation's auc: 0.928349\n",
      "[128]\tvalidation's auc: 0.928425\n",
      "[129]\tvalidation's auc: 0.928342\n",
      "[130]\tvalidation's auc: 0.928372\n",
      "[131]\tvalidation's auc: 0.92823\n",
      "[132]\tvalidation's auc: 0.928132\n",
      "[133]\tvalidation's auc: 0.92821\n",
      "[134]\tvalidation's auc: 0.928303\n",
      "[135]\tvalidation's auc: 0.92821\n",
      "[136]\tvalidation's auc: 0.927963\n",
      "[137]\tvalidation's auc: 0.927894\n",
      "[138]\tvalidation's auc: 0.927961\n",
      "[139]\tvalidation's auc: 0.927888\n",
      "[140]\tvalidation's auc: 0.927927\n",
      "[141]\tvalidation's auc: 0.927858\n",
      "[142]\tvalidation's auc: 0.927886\n",
      "[143]\tvalidation's auc: 0.92768\n",
      "[144]\tvalidation's auc: 0.927702\n",
      "[145]\tvalidation's auc: 0.927704\n",
      "[146]\tvalidation's auc: 0.927651\n",
      "[147]\tvalidation's auc: 0.92746\n",
      "[148]\tvalidation's auc: 0.927337\n",
      "[149]\tvalidation's auc: 0.927363\n",
      "[150]\tvalidation's auc: 0.927148\n",
      "[151]\tvalidation's auc: 0.927227\n",
      "[152]\tvalidation's auc: 0.927203\n",
      "[153]\tvalidation's auc: 0.927204\n",
      "[154]\tvalidation's auc: 0.927107\n",
      "[155]\tvalidation's auc: 0.927124\n",
      "[156]\tvalidation's auc: 0.926983\n",
      "[157]\tvalidation's auc: 0.927128\n",
      "[158]\tvalidation's auc: 0.927243\n",
      "[159]\tvalidation's auc: 0.927463\n",
      "[160]\tvalidation's auc: 0.92773\n",
      "[161]\tvalidation's auc: 0.927873\n",
      "[162]\tvalidation's auc: 0.927768\n",
      "[163]\tvalidation's auc: 0.927834\n",
      "[164]\tvalidation's auc: 0.927784\n",
      "[165]\tvalidation's auc: 0.927909\n",
      "[166]\tvalidation's auc: 0.927913\n",
      "[167]\tvalidation's auc: 0.927815\n",
      "[168]\tvalidation's auc: 0.927859\n",
      "[169]\tvalidation's auc: 0.927934\n",
      "[170]\tvalidation's auc: 0.927906\n",
      "[171]\tvalidation's auc: 0.927862\n",
      "[172]\tvalidation's auc: 0.927846\n",
      "[173]\tvalidation's auc: 0.927847\n",
      "[174]\tvalidation's auc: 0.927774\n",
      "[175]\tvalidation's auc: 0.92779\n",
      "[176]\tvalidation's auc: 0.927702\n",
      "[177]\tvalidation's auc: 0.927562\n",
      "[178]\tvalidation's auc: 0.927502\n",
      "[179]\tvalidation's auc: 0.927477\n",
      "[180]\tvalidation's auc: 0.927321\n",
      "[181]\tvalidation's auc: 0.927203\n",
      "[182]\tvalidation's auc: 0.927209\n",
      "[183]\tvalidation's auc: 0.927208\n",
      "[184]\tvalidation's auc: 0.92722\n",
      "[185]\tvalidation's auc: 0.927103\n",
      "[186]\tvalidation's auc: 0.927046\n",
      "[187]\tvalidation's auc: 0.926984\n",
      "[188]\tvalidation's auc: 0.926951\n",
      "[189]\tvalidation's auc: 0.926869\n",
      "[190]\tvalidation's auc: 0.926786\n",
      "[191]\tvalidation's auc: 0.926854\n",
      "[192]\tvalidation's auc: 0.926932\n",
      "[193]\tvalidation's auc: 0.926781\n",
      "[194]\tvalidation's auc: 0.926696\n",
      "[195]\tvalidation's auc: 0.926559\n",
      "[196]\tvalidation's auc: 0.92648\n",
      "[197]\tvalidation's auc: 0.92644\n",
      "[198]\tvalidation's auc: 0.926605\n",
      "[199]\tvalidation's auc: 0.926428\n",
      "[200]\tvalidation's auc: 0.926549\n",
      "[201]\tvalidation's auc: 0.926439\n",
      "[202]\tvalidation's auc: 0.926405\n",
      "[203]\tvalidation's auc: 0.92645\n",
      "[204]\tvalidation's auc: 0.926458\n",
      "[205]\tvalidation's auc: 0.926294\n",
      "[206]\tvalidation's auc: 0.926245\n",
      "[207]\tvalidation's auc: 0.926214\n",
      "[208]\tvalidation's auc: 0.926127\n",
      "[209]\tvalidation's auc: 0.926328\n",
      "[210]\tvalidation's auc: 0.926258\n",
      "[211]\tvalidation's auc: 0.926164\n",
      "[212]\tvalidation's auc: 0.926148\n",
      "[213]\tvalidation's auc: 0.926169\n",
      "[214]\tvalidation's auc: 0.926274\n",
      "[215]\tvalidation's auc: 0.926325\n",
      "[216]\tvalidation's auc: 0.926126\n",
      "[217]\tvalidation's auc: 0.926003\n",
      "[218]\tvalidation's auc: 0.925933\n",
      "[219]\tvalidation's auc: 0.925975\n",
      "[220]\tvalidation's auc: 0.925855\n",
      "[221]\tvalidation's auc: 0.925774\n",
      "[222]\tvalidation's auc: 0.925667\n",
      "[223]\tvalidation's auc: 0.925542\n",
      "[224]\tvalidation's auc: 0.9256\n",
      "[225]\tvalidation's auc: 0.9256\n",
      "[226]\tvalidation's auc: 0.925706\n",
      "[227]\tvalidation's auc: 0.9256\n",
      "[228]\tvalidation's auc: 0.925789\n",
      "[229]\tvalidation's auc: 0.925717\n",
      "[230]\tvalidation's auc: 0.925707\n",
      "[231]\tvalidation's auc: 0.92564\n",
      "[232]\tvalidation's auc: 0.925498\n",
      "[233]\tvalidation's auc: 0.925486\n",
      "[234]\tvalidation's auc: 0.925515\n",
      "[235]\tvalidation's auc: 0.925564\n",
      "[236]\tvalidation's auc: 0.925751\n",
      "[237]\tvalidation's auc: 0.925746\n",
      "[238]\tvalidation's auc: 0.925708\n",
      "[239]\tvalidation's auc: 0.925777\n",
      "[240]\tvalidation's auc: 0.925749\n",
      "[241]\tvalidation's auc: 0.925735\n",
      "[242]\tvalidation's auc: 0.925667\n",
      "[243]\tvalidation's auc: 0.925601\n",
      "[244]\tvalidation's auc: 0.925664\n",
      "[245]\tvalidation's auc: 0.925492\n",
      "[246]\tvalidation's auc: 0.925307\n",
      "[247]\tvalidation's auc: 0.925174\n",
      "[248]\tvalidation's auc: 0.925057\n",
      "[249]\tvalidation's auc: 0.924897\n",
      "[250]\tvalidation's auc: 0.924894\n",
      "[251]\tvalidation's auc: 0.924898\n",
      "[252]\tvalidation's auc: 0.924841\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[253]\tvalidation's auc: 0.924866\n",
      "[254]\tvalidation's auc: 0.925046\n",
      "[255]\tvalidation's auc: 0.925098\n",
      "[256]\tvalidation's auc: 0.924842\n",
      "[257]\tvalidation's auc: 0.924678\n",
      "[258]\tvalidation's auc: 0.924726\n",
      "[259]\tvalidation's auc: 0.924502\n",
      "[260]\tvalidation's auc: 0.924542\n",
      "[261]\tvalidation's auc: 0.924688\n",
      "[262]\tvalidation's auc: 0.924672\n",
      "[263]\tvalidation's auc: 0.924771\n",
      "[264]\tvalidation's auc: 0.924942\n",
      "[265]\tvalidation's auc: 0.924978\n",
      "[266]\tvalidation's auc: 0.925011\n",
      "[267]\tvalidation's auc: 0.924843\n",
      "[268]\tvalidation's auc: 0.924882\n",
      "[269]\tvalidation's auc: 0.924833\n",
      "[270]\tvalidation's auc: 0.924798\n",
      "[271]\tvalidation's auc: 0.924693\n",
      "[272]\tvalidation's auc: 0.924766\n",
      "[273]\tvalidation's auc: 0.924613\n",
      "[274]\tvalidation's auc: 0.924541\n",
      "[275]\tvalidation's auc: 0.924426\n",
      "[276]\tvalidation's auc: 0.924419\n",
      "[277]\tvalidation's auc: 0.924405\n",
      "[278]\tvalidation's auc: 0.924381\n",
      "[279]\tvalidation's auc: 0.924225\n",
      "[280]\tvalidation's auc: 0.924276\n",
      "[281]\tvalidation's auc: 0.924273\n",
      "[282]\tvalidation's auc: 0.924102\n",
      "[283]\tvalidation's auc: 0.924217\n",
      "[284]\tvalidation's auc: 0.924188\n",
      "[285]\tvalidation's auc: 0.923996\n",
      "[286]\tvalidation's auc: 0.923957\n",
      "[287]\tvalidation's auc: 0.923903\n",
      "[288]\tvalidation's auc: 0.923738\n",
      "[289]\tvalidation's auc: 0.92385\n",
      "[290]\tvalidation's auc: 0.923845\n",
      "[291]\tvalidation's auc: 0.92391\n",
      "[292]\tvalidation's auc: 0.923948\n",
      "[293]\tvalidation's auc: 0.923671\n",
      "[294]\tvalidation's auc: 0.923664\n",
      "[295]\tvalidation's auc: 0.923599\n",
      "[296]\tvalidation's auc: 0.923611\n",
      "[297]\tvalidation's auc: 0.923563\n",
      "[298]\tvalidation's auc: 0.923533\n",
      "[299]\tvalidation's auc: 0.923468\n",
      "[300]\tvalidation's auc: 0.923423\n",
      "[301]\tvalidation's auc: 0.92344\n",
      "[302]\tvalidation's auc: 0.923438\n",
      "[303]\tvalidation's auc: 0.923387\n",
      "[304]\tvalidation's auc: 0.923258\n",
      "[305]\tvalidation's auc: 0.923228\n",
      "[306]\tvalidation's auc: 0.92303\n",
      "[307]\tvalidation's auc: 0.923047\n",
      "[308]\tvalidation's auc: 0.923124\n",
      "Early stopping, best iteration is:\n",
      "[108]\tvalidation's auc: 0.928752\n",
      " Fold 1 | AUC_ROC ： 92.87521599073597%\n",
      "第 1 折\n",
      "\n",
      "[1]\tvalidation's auc: 0.845284\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[2]\tvalidation's auc: 0.863561\n",
      "[3]\tvalidation's auc: 0.872041\n",
      "[4]\tvalidation's auc: 0.874663\n",
      "[5]\tvalidation's auc: 0.87793\n",
      "[6]\tvalidation's auc: 0.884431\n",
      "[7]\tvalidation's auc: 0.886713\n",
      "[8]\tvalidation's auc: 0.889832\n",
      "[9]\tvalidation's auc: 0.890828\n",
      "[10]\tvalidation's auc: 0.8935\n",
      "[11]\tvalidation's auc: 0.895539\n",
      "[12]\tvalidation's auc: 0.897264\n",
      "[13]\tvalidation's auc: 0.898676\n",
      "[14]\tvalidation's auc: 0.900421\n",
      "[15]\tvalidation's auc: 0.901745\n",
      "[16]\tvalidation's auc: 0.902326\n",
      "[17]\tvalidation's auc: 0.903318\n",
      "[18]\tvalidation's auc: 0.904273\n",
      "[19]\tvalidation's auc: 0.905872\n",
      "[20]\tvalidation's auc: 0.906567\n",
      "[21]\tvalidation's auc: 0.908568\n",
      "[22]\tvalidation's auc: 0.909689\n",
      "[23]\tvalidation's auc: 0.911379\n",
      "[24]\tvalidation's auc: 0.91214\n",
      "[25]\tvalidation's auc: 0.913354\n",
      "[26]\tvalidation's auc: 0.914496\n",
      "[27]\tvalidation's auc: 0.91511\n",
      "[28]\tvalidation's auc: 0.91615\n",
      "[29]\tvalidation's auc: 0.916568\n",
      "[30]\tvalidation's auc: 0.916627\n",
      "[31]\tvalidation's auc: 0.916743\n",
      "[32]\tvalidation's auc: 0.917001\n",
      "[33]\tvalidation's auc: 0.917273\n",
      "[34]\tvalidation's auc: 0.918091\n",
      "[35]\tvalidation's auc: 0.918966\n",
      "[36]\tvalidation's auc: 0.920116\n",
      "[37]\tvalidation's auc: 0.920693\n",
      "[38]\tvalidation's auc: 0.920868\n",
      "[39]\tvalidation's auc: 0.921186\n",
      "[40]\tvalidation's auc: 0.92145\n",
      "[41]\tvalidation's auc: 0.921662\n",
      "[42]\tvalidation's auc: 0.921641\n",
      "[43]\tvalidation's auc: 0.921701\n",
      "[44]\tvalidation's auc: 0.922149\n",
      "[45]\tvalidation's auc: 0.922509\n",
      "[46]\tvalidation's auc: 0.922366\n",
      "[47]\tvalidation's auc: 0.922322\n",
      "[48]\tvalidation's auc: 0.922657\n",
      "[49]\tvalidation's auc: 0.922744\n",
      "[50]\tvalidation's auc: 0.922768\n",
      "[51]\tvalidation's auc: 0.922969\n",
      "[52]\tvalidation's auc: 0.923216\n",
      "[53]\tvalidation's auc: 0.923587\n",
      "[54]\tvalidation's auc: 0.923768\n",
      "[55]\tvalidation's auc: 0.923795\n",
      "[56]\tvalidation's auc: 0.923991\n",
      "[57]\tvalidation's auc: 0.923901\n",
      "[58]\tvalidation's auc: 0.923997\n",
      "[59]\tvalidation's auc: 0.923913\n",
      "[60]\tvalidation's auc: 0.924135\n",
      "[61]\tvalidation's auc: 0.924108\n",
      "[62]\tvalidation's auc: 0.924059\n",
      "[63]\tvalidation's auc: 0.924094\n",
      "[64]\tvalidation's auc: 0.924213\n",
      "[65]\tvalidation's auc: 0.92403\n",
      "[66]\tvalidation's auc: 0.924062\n",
      "[67]\tvalidation's auc: 0.92405\n",
      "[68]\tvalidation's auc: 0.923868\n",
      "[69]\tvalidation's auc: 0.923715\n",
      "[70]\tvalidation's auc: 0.923794\n",
      "[71]\tvalidation's auc: 0.923916\n",
      "[72]\tvalidation's auc: 0.923673\n",
      "[73]\tvalidation's auc: 0.923684\n",
      "[74]\tvalidation's auc: 0.923753\n",
      "[75]\tvalidation's auc: 0.923725\n",
      "[76]\tvalidation's auc: 0.923844\n",
      "[77]\tvalidation's auc: 0.923695\n",
      "[78]\tvalidation's auc: 0.923766\n",
      "[79]\tvalidation's auc: 0.923858\n",
      "[80]\tvalidation's auc: 0.9238\n",
      "[81]\tvalidation's auc: 0.923453\n",
      "[82]\tvalidation's auc: 0.923631\n",
      "[83]\tvalidation's auc: 0.923671\n",
      "[84]\tvalidation's auc: 0.923141\n",
      "[85]\tvalidation's auc: 0.923164\n",
      "[86]\tvalidation's auc: 0.923072\n",
      "[87]\tvalidation's auc: 0.923104\n",
      "[88]\tvalidation's auc: 0.923314\n",
      "[89]\tvalidation's auc: 0.923309\n",
      "[90]\tvalidation's auc: 0.923259\n",
      "[91]\tvalidation's auc: 0.923144\n",
      "[92]\tvalidation's auc: 0.923162\n",
      "[93]\tvalidation's auc: 0.923276\n",
      "[94]\tvalidation's auc: 0.922968\n",
      "[95]\tvalidation's auc: 0.923024\n",
      "[96]\tvalidation's auc: 0.922903\n",
      "[97]\tvalidation's auc: 0.922991\n",
      "[98]\tvalidation's auc: 0.923021\n",
      "[99]\tvalidation's auc: 0.923059\n",
      "[100]\tvalidation's auc: 0.922823\n",
      "[101]\tvalidation's auc: 0.922822\n",
      "[102]\tvalidation's auc: 0.922807\n",
      "[103]\tvalidation's auc: 0.922766\n",
      "[104]\tvalidation's auc: 0.922911\n",
      "[105]\tvalidation's auc: 0.923054\n",
      "[106]\tvalidation's auc: 0.922989\n",
      "[107]\tvalidation's auc: 0.923164\n",
      "[108]\tvalidation's auc: 0.92284\n",
      "[109]\tvalidation's auc: 0.922704\n",
      "[110]\tvalidation's auc: 0.922583\n",
      "[111]\tvalidation's auc: 0.922757\n",
      "[112]\tvalidation's auc: 0.922559\n",
      "[113]\tvalidation's auc: 0.922482\n",
      "[114]\tvalidation's auc: 0.922704\n",
      "[115]\tvalidation's auc: 0.922724\n",
      "[116]\tvalidation's auc: 0.922552\n",
      "[117]\tvalidation's auc: 0.922448\n",
      "[118]\tvalidation's auc: 0.9227\n",
      "[119]\tvalidation's auc: 0.922605\n",
      "[120]\tvalidation's auc: 0.92252\n",
      "[121]\tvalidation's auc: 0.922421\n",
      "[122]\tvalidation's auc: 0.922492\n",
      "[123]\tvalidation's auc: 0.922579\n",
      "[124]\tvalidation's auc: 0.922657\n",
      "[125]\tvalidation's auc: 0.922686\n",
      "[126]\tvalidation's auc: 0.922796\n",
      "[127]\tvalidation's auc: 0.92267\n",
      "[128]\tvalidation's auc: 0.922676\n",
      "[129]\tvalidation's auc: 0.922594\n",
      "[130]\tvalidation's auc: 0.922629\n",
      "[131]\tvalidation's auc: 0.9227\n",
      "[132]\tvalidation's auc: 0.922494\n",
      "[133]\tvalidation's auc: 0.922433\n",
      "[134]\tvalidation's auc: 0.922413\n",
      "[135]\tvalidation's auc: 0.922242\n",
      "[136]\tvalidation's auc: 0.922236\n",
      "[137]\tvalidation's auc: 0.922176\n",
      "[138]\tvalidation's auc: 0.922212\n",
      "[139]\tvalidation's auc: 0.922183\n",
      "[140]\tvalidation's auc: 0.922058\n",
      "[141]\tvalidation's auc: 0.922124\n",
      "[142]\tvalidation's auc: 0.922039\n",
      "[143]\tvalidation's auc: 0.921954\n",
      "[144]\tvalidation's auc: 0.922209\n",
      "[145]\tvalidation's auc: 0.922309\n",
      "[146]\tvalidation's auc: 0.922392\n",
      "[147]\tvalidation's auc: 0.922468\n",
      "[148]\tvalidation's auc: 0.922585\n",
      "[149]\tvalidation's auc: 0.92259\n",
      "[150]\tvalidation's auc: 0.922595\n",
      "[151]\tvalidation's auc: 0.922356\n",
      "[152]\tvalidation's auc: 0.922318\n",
      "[153]\tvalidation's auc: 0.922251\n",
      "[154]\tvalidation's auc: 0.922221\n",
      "[155]\tvalidation's auc: 0.922312\n",
      "[156]\tvalidation's auc: 0.92222\n",
      "[157]\tvalidation's auc: 0.922036\n",
      "[158]\tvalidation's auc: 0.922028\n",
      "[159]\tvalidation's auc: 0.921998\n",
      "[160]\tvalidation's auc: 0.922068\n",
      "[161]\tvalidation's auc: 0.922075\n",
      "[162]\tvalidation's auc: 0.92221\n",
      "[163]\tvalidation's auc: 0.922273\n",
      "[164]\tvalidation's auc: 0.922313\n",
      "[165]\tvalidation's auc: 0.92235\n",
      "[166]\tvalidation's auc: 0.922391\n",
      "[167]\tvalidation's auc: 0.922324\n",
      "[168]\tvalidation's auc: 0.922355\n",
      "[169]\tvalidation's auc: 0.922323\n",
      "[170]\tvalidation's auc: 0.922276\n",
      "[171]\tvalidation's auc: 0.922405\n",
      "[172]\tvalidation's auc: 0.922349\n",
      "[173]\tvalidation's auc: 0.922349\n",
      "[174]\tvalidation's auc: 0.922023\n",
      "[175]\tvalidation's auc: 0.921913\n",
      "[176]\tvalidation's auc: 0.922006\n",
      "[177]\tvalidation's auc: 0.921906\n",
      "[178]\tvalidation's auc: 0.92195\n",
      "[179]\tvalidation's auc: 0.922015\n",
      "[180]\tvalidation's auc: 0.922003\n",
      "[181]\tvalidation's auc: 0.92192\n",
      "[182]\tvalidation's auc: 0.921982\n",
      "[183]\tvalidation's auc: 0.921912\n",
      "[184]\tvalidation's auc: 0.921855\n",
      "[185]\tvalidation's auc: 0.92196\n",
      "[186]\tvalidation's auc: 0.921926\n",
      "[187]\tvalidation's auc: 0.921889\n",
      "[188]\tvalidation's auc: 0.921879\n",
      "[189]\tvalidation's auc: 0.921721\n",
      "[190]\tvalidation's auc: 0.921677\n",
      "[191]\tvalidation's auc: 0.921641\n",
      "[192]\tvalidation's auc: 0.921544\n",
      "[193]\tvalidation's auc: 0.92157\n",
      "[194]\tvalidation's auc: 0.92165\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[195]\tvalidation's auc: 0.92166\n",
      "[196]\tvalidation's auc: 0.921696\n",
      "[197]\tvalidation's auc: 0.921633\n",
      "[198]\tvalidation's auc: 0.921602\n",
      "[199]\tvalidation's auc: 0.921624\n",
      "[200]\tvalidation's auc: 0.921669\n",
      "[201]\tvalidation's auc: 0.921665\n",
      "[202]\tvalidation's auc: 0.921639\n",
      "[203]\tvalidation's auc: 0.921551\n",
      "[204]\tvalidation's auc: 0.921675\n",
      "[205]\tvalidation's auc: 0.921828\n",
      "[206]\tvalidation's auc: 0.921686\n",
      "[207]\tvalidation's auc: 0.921465\n",
      "[208]\tvalidation's auc: 0.92161\n",
      "[209]\tvalidation's auc: 0.921701\n",
      "[210]\tvalidation's auc: 0.921726\n",
      "[211]\tvalidation's auc: 0.921798\n",
      "[212]\tvalidation's auc: 0.921764\n",
      "[213]\tvalidation's auc: 0.921788\n",
      "[214]\tvalidation's auc: 0.921896\n",
      "[215]\tvalidation's auc: 0.92178\n",
      "[216]\tvalidation's auc: 0.921753\n",
      "[217]\tvalidation's auc: 0.921768\n",
      "[218]\tvalidation's auc: 0.921734\n",
      "[219]\tvalidation's auc: 0.921758\n",
      "[220]\tvalidation's auc: 0.921735\n",
      "[221]\tvalidation's auc: 0.921696\n",
      "[222]\tvalidation's auc: 0.921667\n",
      "[223]\tvalidation's auc: 0.921753\n",
      "[224]\tvalidation's auc: 0.921871\n",
      "[225]\tvalidation's auc: 0.921945\n",
      "[226]\tvalidation's auc: 0.921958\n",
      "[227]\tvalidation's auc: 0.921912\n",
      "[228]\tvalidation's auc: 0.92199\n",
      "[229]\tvalidation's auc: 0.922115\n",
      "[230]\tvalidation's auc: 0.922014\n",
      "[231]\tvalidation's auc: 0.922025\n",
      "[232]\tvalidation's auc: 0.922057\n",
      "[233]\tvalidation's auc: 0.922123\n",
      "[234]\tvalidation's auc: 0.922275\n",
      "[235]\tvalidation's auc: 0.922324\n",
      "[236]\tvalidation's auc: 0.922346\n",
      "[237]\tvalidation's auc: 0.922464\n",
      "[238]\tvalidation's auc: 0.922524\n",
      "[239]\tvalidation's auc: 0.922387\n",
      "[240]\tvalidation's auc: 0.922316\n",
      "[241]\tvalidation's auc: 0.922296\n",
      "[242]\tvalidation's auc: 0.922329\n",
      "[243]\tvalidation's auc: 0.922192\n",
      "[244]\tvalidation's auc: 0.922222\n",
      "[245]\tvalidation's auc: 0.922342\n",
      "[246]\tvalidation's auc: 0.922228\n",
      "[247]\tvalidation's auc: 0.92205\n",
      "[248]\tvalidation's auc: 0.922097\n",
      "[249]\tvalidation's auc: 0.922125\n",
      "[250]\tvalidation's auc: 0.922149\n",
      "[251]\tvalidation's auc: 0.922165\n",
      "[252]\tvalidation's auc: 0.922234\n",
      "[253]\tvalidation's auc: 0.92227\n",
      "[254]\tvalidation's auc: 0.922222\n",
      "[255]\tvalidation's auc: 0.922253\n",
      "[256]\tvalidation's auc: 0.922227\n",
      "[257]\tvalidation's auc: 0.922144\n",
      "[258]\tvalidation's auc: 0.92213\n",
      "[259]\tvalidation's auc: 0.922122\n",
      "[260]\tvalidation's auc: 0.922205\n",
      "[261]\tvalidation's auc: 0.922123\n",
      "[262]\tvalidation's auc: 0.92209\n",
      "[263]\tvalidation's auc: 0.922052\n",
      "[264]\tvalidation's auc: 0.922134\n",
      "Early stopping, best iteration is:\n",
      "[64]\tvalidation's auc: 0.924213\n",
      " Fold 2 | AUC_ROC ： 92.42131054739104%\n",
      "第 2 折\n",
      "\n",
      "[1]\tvalidation's auc: 0.862364\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[2]\tvalidation's auc: 0.887233\n",
      "[3]\tvalidation's auc: 0.894581\n",
      "[4]\tvalidation's auc: 0.897813\n",
      "[5]\tvalidation's auc: 0.901525\n",
      "[6]\tvalidation's auc: 0.902962\n",
      "[7]\tvalidation's auc: 0.903969\n",
      "[8]\tvalidation's auc: 0.905906\n",
      "[9]\tvalidation's auc: 0.908489\n",
      "[10]\tvalidation's auc: 0.909412\n",
      "[11]\tvalidation's auc: 0.910221\n",
      "[12]\tvalidation's auc: 0.910846\n",
      "[13]\tvalidation's auc: 0.9124\n",
      "[14]\tvalidation's auc: 0.913074\n",
      "[15]\tvalidation's auc: 0.913879\n",
      "[16]\tvalidation's auc: 0.915104\n",
      "[17]\tvalidation's auc: 0.915273\n",
      "[18]\tvalidation's auc: 0.916106\n",
      "[19]\tvalidation's auc: 0.918464\n",
      "[20]\tvalidation's auc: 0.919424\n",
      "[21]\tvalidation's auc: 0.922329\n",
      "[22]\tvalidation's auc: 0.923936\n",
      "[23]\tvalidation's auc: 0.92524\n",
      "[24]\tvalidation's auc: 0.926305\n",
      "[25]\tvalidation's auc: 0.926358\n",
      "[26]\tvalidation's auc: 0.927194\n",
      "[27]\tvalidation's auc: 0.928806\n",
      "[28]\tvalidation's auc: 0.929324\n",
      "[29]\tvalidation's auc: 0.930482\n",
      "[30]\tvalidation's auc: 0.931417\n",
      "[31]\tvalidation's auc: 0.93222\n",
      "[32]\tvalidation's auc: 0.932651\n",
      "[33]\tvalidation's auc: 0.933299\n",
      "[34]\tvalidation's auc: 0.933988\n",
      "[35]\tvalidation's auc: 0.934466\n",
      "[36]\tvalidation's auc: 0.935215\n",
      "[37]\tvalidation's auc: 0.935755\n",
      "[38]\tvalidation's auc: 0.936214\n",
      "[39]\tvalidation's auc: 0.936184\n",
      "[40]\tvalidation's auc: 0.93642\n",
      "[41]\tvalidation's auc: 0.936715\n",
      "[42]\tvalidation's auc: 0.937193\n",
      "[43]\tvalidation's auc: 0.937524\n",
      "[44]\tvalidation's auc: 0.938397\n",
      "[45]\tvalidation's auc: 0.938725\n",
      "[46]\tvalidation's auc: 0.939287\n",
      "[47]\tvalidation's auc: 0.939367\n",
      "[48]\tvalidation's auc: 0.939753\n",
      "[49]\tvalidation's auc: 0.940245\n",
      "[50]\tvalidation's auc: 0.940464\n",
      "[51]\tvalidation's auc: 0.940504\n",
      "[52]\tvalidation's auc: 0.940566\n",
      "[53]\tvalidation's auc: 0.940549\n",
      "[54]\tvalidation's auc: 0.940481\n",
      "[55]\tvalidation's auc: 0.940518\n",
      "[56]\tvalidation's auc: 0.940542\n",
      "[57]\tvalidation's auc: 0.940565\n",
      "[58]\tvalidation's auc: 0.940964\n",
      "[59]\tvalidation's auc: 0.941233\n",
      "[60]\tvalidation's auc: 0.941204\n",
      "[61]\tvalidation's auc: 0.941151\n",
      "[62]\tvalidation's auc: 0.941146\n",
      "[63]\tvalidation's auc: 0.941262\n",
      "[64]\tvalidation's auc: 0.941548\n",
      "[65]\tvalidation's auc: 0.941583\n",
      "[66]\tvalidation's auc: 0.94169\n",
      "[67]\tvalidation's auc: 0.941791\n",
      "[68]\tvalidation's auc: 0.941807\n",
      "[69]\tvalidation's auc: 0.941899\n",
      "[70]\tvalidation's auc: 0.942224\n",
      "[71]\tvalidation's auc: 0.942247\n",
      "[72]\tvalidation's auc: 0.942331\n",
      "[73]\tvalidation's auc: 0.942386\n",
      "[74]\tvalidation's auc: 0.942109\n",
      "[75]\tvalidation's auc: 0.94227\n",
      "[76]\tvalidation's auc: 0.942436\n",
      "[77]\tvalidation's auc: 0.942435\n",
      "[78]\tvalidation's auc: 0.942425\n",
      "[79]\tvalidation's auc: 0.942559\n",
      "[80]\tvalidation's auc: 0.942392\n",
      "[81]\tvalidation's auc: 0.942574\n",
      "[82]\tvalidation's auc: 0.942463\n",
      "[83]\tvalidation's auc: 0.942385\n",
      "[84]\tvalidation's auc: 0.942289\n",
      "[85]\tvalidation's auc: 0.942146\n",
      "[86]\tvalidation's auc: 0.942216\n",
      "[87]\tvalidation's auc: 0.942216\n",
      "[88]\tvalidation's auc: 0.941816\n",
      "[89]\tvalidation's auc: 0.941624\n",
      "[90]\tvalidation's auc: 0.941679\n",
      "[91]\tvalidation's auc: 0.941658\n",
      "[92]\tvalidation's auc: 0.941619\n",
      "[93]\tvalidation's auc: 0.941546\n",
      "[94]\tvalidation's auc: 0.941605\n",
      "[95]\tvalidation's auc: 0.941594\n",
      "[96]\tvalidation's auc: 0.941634\n",
      "[97]\tvalidation's auc: 0.941618\n",
      "[98]\tvalidation's auc: 0.94175\n",
      "[99]\tvalidation's auc: 0.941752\n",
      "[100]\tvalidation's auc: 0.941813\n",
      "[101]\tvalidation's auc: 0.941828\n",
      "[102]\tvalidation's auc: 0.941747\n",
      "[103]\tvalidation's auc: 0.941772\n",
      "[104]\tvalidation's auc: 0.941758\n",
      "[105]\tvalidation's auc: 0.941879\n",
      "[106]\tvalidation's auc: 0.941788\n",
      "[107]\tvalidation's auc: 0.941856\n",
      "[108]\tvalidation's auc: 0.941823\n",
      "[109]\tvalidation's auc: 0.941617\n",
      "[110]\tvalidation's auc: 0.941584\n",
      "[111]\tvalidation's auc: 0.941663\n",
      "[112]\tvalidation's auc: 0.941633\n",
      "[113]\tvalidation's auc: 0.941482\n",
      "[114]\tvalidation's auc: 0.941493\n",
      "[115]\tvalidation's auc: 0.941485\n",
      "[116]\tvalidation's auc: 0.941621\n",
      "[117]\tvalidation's auc: 0.941526\n",
      "[118]\tvalidation's auc: 0.941418\n",
      "[119]\tvalidation's auc: 0.94144\n",
      "[120]\tvalidation's auc: 0.941374\n",
      "[121]\tvalidation's auc: 0.941497\n",
      "[122]\tvalidation's auc: 0.941561\n",
      "[123]\tvalidation's auc: 0.941639\n",
      "[124]\tvalidation's auc: 0.941531\n",
      "[125]\tvalidation's auc: 0.941556\n",
      "[126]\tvalidation's auc: 0.941491\n",
      "[127]\tvalidation's auc: 0.94148\n",
      "[128]\tvalidation's auc: 0.941534\n",
      "[129]\tvalidation's auc: 0.94137\n",
      "[130]\tvalidation's auc: 0.941428\n",
      "[131]\tvalidation's auc: 0.941412\n",
      "[132]\tvalidation's auc: 0.941488\n",
      "[133]\tvalidation's auc: 0.941471\n",
      "[134]\tvalidation's auc: 0.941416\n",
      "[135]\tvalidation's auc: 0.9416\n",
      "[136]\tvalidation's auc: 0.941616\n",
      "[137]\tvalidation's auc: 0.941649\n",
      "[138]\tvalidation's auc: 0.941622\n",
      "[139]\tvalidation's auc: 0.941492\n",
      "[140]\tvalidation's auc: 0.941402\n",
      "[141]\tvalidation's auc: 0.941416\n",
      "[142]\tvalidation's auc: 0.941462\n",
      "[143]\tvalidation's auc: 0.941512\n",
      "[144]\tvalidation's auc: 0.941534\n",
      "[145]\tvalidation's auc: 0.941504\n",
      "[146]\tvalidation's auc: 0.941566\n",
      "[147]\tvalidation's auc: 0.941474\n",
      "[148]\tvalidation's auc: 0.941439\n",
      "[149]\tvalidation's auc: 0.941656\n",
      "[150]\tvalidation's auc: 0.941644\n",
      "[151]\tvalidation's auc: 0.941614\n",
      "[152]\tvalidation's auc: 0.941578\n",
      "[153]\tvalidation's auc: 0.941549\n",
      "[154]\tvalidation's auc: 0.941496\n",
      "[155]\tvalidation's auc: 0.941542\n",
      "[156]\tvalidation's auc: 0.941555\n",
      "[157]\tvalidation's auc: 0.941534\n",
      "[158]\tvalidation's auc: 0.941436\n",
      "[159]\tvalidation's auc: 0.941492\n",
      "[160]\tvalidation's auc: 0.941296\n",
      "[161]\tvalidation's auc: 0.941298\n",
      "[162]\tvalidation's auc: 0.941292\n",
      "[163]\tvalidation's auc: 0.941293\n",
      "[164]\tvalidation's auc: 0.941209\n",
      "[165]\tvalidation's auc: 0.941061\n",
      "[166]\tvalidation's auc: 0.941064\n",
      "[167]\tvalidation's auc: 0.941056\n",
      "[168]\tvalidation's auc: 0.941056\n",
      "[169]\tvalidation's auc: 0.940996\n",
      "[170]\tvalidation's auc: 0.940877\n",
      "[171]\tvalidation's auc: 0.940869\n",
      "[172]\tvalidation's auc: 0.940773\n",
      "[173]\tvalidation's auc: 0.940769\n",
      "[174]\tvalidation's auc: 0.940525\n",
      "[175]\tvalidation's auc: 0.940513\n",
      "[176]\tvalidation's auc: 0.940451\n",
      "[177]\tvalidation's auc: 0.940418\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[178]\tvalidation's auc: 0.940462\n",
      "[179]\tvalidation's auc: 0.940524\n",
      "[180]\tvalidation's auc: 0.940535\n",
      "[181]\tvalidation's auc: 0.940467\n",
      "[182]\tvalidation's auc: 0.940536\n",
      "[183]\tvalidation's auc: 0.940525\n",
      "[184]\tvalidation's auc: 0.940478\n",
      "[185]\tvalidation's auc: 0.940467\n",
      "[186]\tvalidation's auc: 0.940418\n",
      "[187]\tvalidation's auc: 0.940455\n",
      "[188]\tvalidation's auc: 0.940495\n",
      "[189]\tvalidation's auc: 0.940464\n",
      "[190]\tvalidation's auc: 0.940481\n",
      "[191]\tvalidation's auc: 0.940433\n",
      "[192]\tvalidation's auc: 0.940364\n",
      "[193]\tvalidation's auc: 0.940361\n",
      "[194]\tvalidation's auc: 0.940485\n",
      "[195]\tvalidation's auc: 0.940364\n",
      "[196]\tvalidation's auc: 0.940396\n",
      "[197]\tvalidation's auc: 0.940334\n",
      "[198]\tvalidation's auc: 0.940307\n",
      "[199]\tvalidation's auc: 0.940396\n",
      "[200]\tvalidation's auc: 0.9404\n",
      "[201]\tvalidation's auc: 0.940513\n",
      "[202]\tvalidation's auc: 0.940471\n",
      "[203]\tvalidation's auc: 0.940548\n",
      "[204]\tvalidation's auc: 0.940506\n",
      "[205]\tvalidation's auc: 0.940438\n",
      "[206]\tvalidation's auc: 0.940469\n",
      "[207]\tvalidation's auc: 0.940502\n",
      "[208]\tvalidation's auc: 0.94061\n",
      "[209]\tvalidation's auc: 0.940619\n",
      "[210]\tvalidation's auc: 0.940555\n",
      "[211]\tvalidation's auc: 0.940539\n",
      "[212]\tvalidation's auc: 0.940533\n",
      "[213]\tvalidation's auc: 0.940535\n",
      "[214]\tvalidation's auc: 0.9406\n",
      "[215]\tvalidation's auc: 0.940657\n",
      "[216]\tvalidation's auc: 0.940693\n",
      "[217]\tvalidation's auc: 0.940524\n",
      "[218]\tvalidation's auc: 0.940408\n",
      "[219]\tvalidation's auc: 0.940388\n",
      "[220]\tvalidation's auc: 0.940446\n",
      "[221]\tvalidation's auc: 0.94031\n",
      "[222]\tvalidation's auc: 0.9404\n",
      "[223]\tvalidation's auc: 0.940456\n",
      "[224]\tvalidation's auc: 0.940308\n",
      "[225]\tvalidation's auc: 0.940143\n",
      "[226]\tvalidation's auc: 0.940098\n",
      "[227]\tvalidation's auc: 0.940168\n",
      "[228]\tvalidation's auc: 0.940186\n",
      "[229]\tvalidation's auc: 0.940236\n",
      "[230]\tvalidation's auc: 0.940344\n",
      "[231]\tvalidation's auc: 0.940185\n",
      "[232]\tvalidation's auc: 0.940144\n",
      "[233]\tvalidation's auc: 0.940155\n",
      "[234]\tvalidation's auc: 0.940166\n",
      "[235]\tvalidation's auc: 0.940215\n",
      "[236]\tvalidation's auc: 0.940097\n",
      "[237]\tvalidation's auc: 0.940113\n",
      "[238]\tvalidation's auc: 0.939989\n",
      "[239]\tvalidation's auc: 0.939893\n",
      "[240]\tvalidation's auc: 0.939909\n",
      "[241]\tvalidation's auc: 0.939821\n",
      "[242]\tvalidation's auc: 0.93995\n",
      "[243]\tvalidation's auc: 0.93987\n",
      "[244]\tvalidation's auc: 0.939884\n",
      "[245]\tvalidation's auc: 0.939858\n",
      "[246]\tvalidation's auc: 0.939785\n",
      "[247]\tvalidation's auc: 0.939741\n",
      "[248]\tvalidation's auc: 0.939752\n",
      "[249]\tvalidation's auc: 0.939658\n",
      "[250]\tvalidation's auc: 0.9397\n",
      "[251]\tvalidation's auc: 0.939698\n",
      "[252]\tvalidation's auc: 0.939629\n",
      "[253]\tvalidation's auc: 0.939542\n",
      "[254]\tvalidation's auc: 0.939527\n",
      "[255]\tvalidation's auc: 0.939561\n",
      "[256]\tvalidation's auc: 0.939458\n",
      "[257]\tvalidation's auc: 0.93946\n",
      "[258]\tvalidation's auc: 0.93942\n",
      "[259]\tvalidation's auc: 0.939448\n",
      "[260]\tvalidation's auc: 0.939441\n",
      "[261]\tvalidation's auc: 0.939381\n",
      "[262]\tvalidation's auc: 0.939419\n",
      "[263]\tvalidation's auc: 0.939312\n",
      "[264]\tvalidation's auc: 0.939394\n",
      "[265]\tvalidation's auc: 0.939396\n",
      "[266]\tvalidation's auc: 0.939418\n",
      "[267]\tvalidation's auc: 0.939355\n",
      "[268]\tvalidation's auc: 0.939394\n",
      "[269]\tvalidation's auc: 0.939395\n",
      "[270]\tvalidation's auc: 0.939391\n",
      "[271]\tvalidation's auc: 0.939403\n",
      "[272]\tvalidation's auc: 0.939432\n",
      "[273]\tvalidation's auc: 0.939336\n",
      "[274]\tvalidation's auc: 0.939378\n",
      "[275]\tvalidation's auc: 0.939306\n",
      "[276]\tvalidation's auc: 0.93933\n",
      "[277]\tvalidation's auc: 0.939251\n",
      "[278]\tvalidation's auc: 0.939217\n",
      "[279]\tvalidation's auc: 0.939195\n",
      "[280]\tvalidation's auc: 0.939336\n",
      "[281]\tvalidation's auc: 0.939264\n",
      "Early stopping, best iteration is:\n",
      "[81]\tvalidation's auc: 0.942574\n",
      " Fold 3 | AUC_ROC ： 94.25739265998213%\n",
      "第 3 折\n",
      "\n",
      "[1]\tvalidation's auc: 0.826094\n",
      "Training until validation scores don't improve for 200 rounds\n",
      "[2]\tvalidation's auc: 0.845408\n",
      "[3]\tvalidation's auc: 0.852524\n",
      "[4]\tvalidation's auc: 0.860275\n",
      "[5]\tvalidation's auc: 0.867425\n",
      "[6]\tvalidation's auc: 0.871188\n",
      "[7]\tvalidation's auc: 0.873895\n",
      "[8]\tvalidation's auc: 0.876728\n",
      "[9]\tvalidation's auc: 0.879069\n",
      "[10]\tvalidation's auc: 0.880242\n",
      "[11]\tvalidation's auc: 0.882926\n",
      "[12]\tvalidation's auc: 0.885214\n",
      "[13]\tvalidation's auc: 0.886359\n",
      "[14]\tvalidation's auc: 0.886311\n",
      "[15]\tvalidation's auc: 0.888175\n",
      "[16]\tvalidation's auc: 0.889914\n",
      "[17]\tvalidation's auc: 0.891549\n",
      "[18]\tvalidation's auc: 0.891804\n",
      "[19]\tvalidation's auc: 0.893209\n",
      "[20]\tvalidation's auc: 0.895974\n",
      "[21]\tvalidation's auc: 0.89722\n",
      "[22]\tvalidation's auc: 0.898252\n",
      "[23]\tvalidation's auc: 0.899534\n",
      "[24]\tvalidation's auc: 0.900967\n",
      "[25]\tvalidation's auc: 0.902938\n",
      "[26]\tvalidation's auc: 0.903648\n",
      "[27]\tvalidation's auc: 0.904423\n",
      "[28]\tvalidation's auc: 0.905245\n",
      "[29]\tvalidation's auc: 0.906003\n",
      "[30]\tvalidation's auc: 0.907271\n",
      "[31]\tvalidation's auc: 0.90834\n",
      "[32]\tvalidation's auc: 0.908865\n",
      "[33]\tvalidation's auc: 0.910227\n",
      "[34]\tvalidation's auc: 0.910903\n",
      "[35]\tvalidation's auc: 0.911686\n",
      "[36]\tvalidation's auc: 0.911556\n",
      "[37]\tvalidation's auc: 0.91232\n",
      "[38]\tvalidation's auc: 0.912839\n",
      "[39]\tvalidation's auc: 0.913262\n",
      "[40]\tvalidation's auc: 0.913427\n",
      "[41]\tvalidation's auc: 0.914058\n",
      "[42]\tvalidation's auc: 0.914659\n",
      "[43]\tvalidation's auc: 0.914788\n",
      "[44]\tvalidation's auc: 0.914919\n",
      "[45]\tvalidation's auc: 0.914976\n",
      "[46]\tvalidation's auc: 0.91529\n",
      "[47]\tvalidation's auc: 0.915498\n",
      "[48]\tvalidation's auc: 0.915808\n",
      "[49]\tvalidation's auc: 0.915727\n",
      "[50]\tvalidation's auc: 0.915881\n",
      "[51]\tvalidation's auc: 0.916044\n",
      "[52]\tvalidation's auc: 0.91601\n",
      "[53]\tvalidation's auc: 0.915816\n",
      "[54]\tvalidation's auc: 0.915792\n",
      "[55]\tvalidation's auc: 0.915908\n",
      "[56]\tvalidation's auc: 0.915787\n",
      "[57]\tvalidation's auc: 0.916059\n",
      "[58]\tvalidation's auc: 0.916097\n",
      "[59]\tvalidation's auc: 0.916205\n",
      "[60]\tvalidation's auc: 0.916458\n",
      "[61]\tvalidation's auc: 0.916386\n",
      "[62]\tvalidation's auc: 0.916409\n",
      "[63]\tvalidation's auc: 0.916332\n",
      "[64]\tvalidation's auc: 0.916382\n",
      "[65]\tvalidation's auc: 0.915925\n",
      "[66]\tvalidation's auc: 0.916176\n",
      "[67]\tvalidation's auc: 0.916293\n",
      "[68]\tvalidation's auc: 0.915991\n",
      "[69]\tvalidation's auc: 0.915885\n",
      "[70]\tvalidation's auc: 0.915911\n",
      "[71]\tvalidation's auc: 0.915954\n",
      "[72]\tvalidation's auc: 0.915804\n",
      "[73]\tvalidation's auc: 0.916375\n",
      "[74]\tvalidation's auc: 0.916605\n",
      "[75]\tvalidation's auc: 0.916844\n",
      "[76]\tvalidation's auc: 0.916881\n",
      "[77]\tvalidation's auc: 0.916779\n",
      "[78]\tvalidation's auc: 0.91689\n",
      "[79]\tvalidation's auc: 0.916714\n",
      "[80]\tvalidation's auc: 0.916562\n",
      "[81]\tvalidation's auc: 0.91653\n",
      "[82]\tvalidation's auc: 0.916519\n",
      "[83]\tvalidation's auc: 0.916376\n",
      "[84]\tvalidation's auc: 0.916238\n",
      "[85]\tvalidation's auc: 0.915998\n",
      "[86]\tvalidation's auc: 0.915919\n",
      "[87]\tvalidation's auc: 0.915862\n",
      "[88]\tvalidation's auc: 0.915859\n",
      "[89]\tvalidation's auc: 0.915617\n",
      "[90]\tvalidation's auc: 0.915575\n",
      "[91]\tvalidation's auc: 0.915678\n",
      "[92]\tvalidation's auc: 0.915512\n",
      "[93]\tvalidation's auc: 0.915255\n",
      "[94]\tvalidation's auc: 0.915224\n",
      "[95]\tvalidation's auc: 0.915236\n",
      "[96]\tvalidation's auc: 0.915202\n",
      "[97]\tvalidation's auc: 0.915222\n",
      "[98]\tvalidation's auc: 0.915072\n",
      "[99]\tvalidation's auc: 0.915025\n",
      "[100]\tvalidation's auc: 0.915074\n",
      "[101]\tvalidation's auc: 0.914925\n",
      "[102]\tvalidation's auc: 0.914848\n",
      "[103]\tvalidation's auc: 0.914909\n",
      "[104]\tvalidation's auc: 0.914639\n",
      "[105]\tvalidation's auc: 0.914553\n",
      "[106]\tvalidation's auc: 0.914735\n",
      "[107]\tvalidation's auc: 0.914586\n",
      "[108]\tvalidation's auc: 0.914499\n",
      "[109]\tvalidation's auc: 0.914548\n",
      "[110]\tvalidation's auc: 0.914482\n",
      "[111]\tvalidation's auc: 0.914207\n",
      "[112]\tvalidation's auc: 0.914412\n",
      "[113]\tvalidation's auc: 0.91442\n",
      "[114]\tvalidation's auc: 0.914426\n",
      "[115]\tvalidation's auc: 0.914562\n",
      "[116]\tvalidation's auc: 0.914548\n",
      "[117]\tvalidation's auc: 0.914492\n",
      "[118]\tvalidation's auc: 0.914491\n",
      "[119]\tvalidation's auc: 0.914673\n",
      "[120]\tvalidation's auc: 0.914658\n",
      "[121]\tvalidation's auc: 0.914513\n",
      "[122]\tvalidation's auc: 0.91457\n",
      "[123]\tvalidation's auc: 0.914516\n",
      "[124]\tvalidation's auc: 0.914604\n",
      "[125]\tvalidation's auc: 0.915036\n",
      "[126]\tvalidation's auc: 0.914961\n",
      "[127]\tvalidation's auc: 0.915012\n",
      "[128]\tvalidation's auc: 0.915017\n",
      "[129]\tvalidation's auc: 0.915173\n",
      "[130]\tvalidation's auc: 0.915257\n",
      "[131]\tvalidation's auc: 0.914998\n",
      "[132]\tvalidation's auc: 0.914991\n",
      "[133]\tvalidation's auc: 0.915091\n",
      "[134]\tvalidation's auc: 0.914927\n",
      "[135]\tvalidation's auc: 0.914872\n",
      "[136]\tvalidation's auc: 0.915002\n",
      "[137]\tvalidation's auc: 0.915015\n",
      "[138]\tvalidation's auc: 0.914982\n",
      "[139]\tvalidation's auc: 0.91478\n",
      "[140]\tvalidation's auc: 0.914639\n",
      "[141]\tvalidation's auc: 0.914695\n",
      "[142]\tvalidation's auc: 0.914677\n",
      "[143]\tvalidation's auc: 0.914813\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[144]\tvalidation's auc: 0.914879\n",
      "[145]\tvalidation's auc: 0.914869\n",
      "[146]\tvalidation's auc: 0.915041\n",
      "[147]\tvalidation's auc: 0.915182\n",
      "[148]\tvalidation's auc: 0.915218\n",
      "[149]\tvalidation's auc: 0.91508\n",
      "[150]\tvalidation's auc: 0.91511\n",
      "[151]\tvalidation's auc: 0.915103\n",
      "[152]\tvalidation's auc: 0.915165\n",
      "[153]\tvalidation's auc: 0.915296\n",
      "[154]\tvalidation's auc: 0.915149\n",
      "[155]\tvalidation's auc: 0.915353\n",
      "[156]\tvalidation's auc: 0.915399\n",
      "[157]\tvalidation's auc: 0.915274\n",
      "[158]\tvalidation's auc: 0.91541\n",
      "[159]\tvalidation's auc: 0.915406\n",
      "[160]\tvalidation's auc: 0.915525\n",
      "[161]\tvalidation's auc: 0.915376\n",
      "[162]\tvalidation's auc: 0.91542\n",
      "[163]\tvalidation's auc: 0.915307\n",
      "[164]\tvalidation's auc: 0.915442\n",
      "[165]\tvalidation's auc: 0.91555\n",
      "[166]\tvalidation's auc: 0.915603\n",
      "[167]\tvalidation's auc: 0.915696\n",
      "[168]\tvalidation's auc: 0.915832\n",
      "[169]\tvalidation's auc: 0.915877\n",
      "[170]\tvalidation's auc: 0.915771\n",
      "[171]\tvalidation's auc: 0.915676\n",
      "[172]\tvalidation's auc: 0.915803\n",
      "[173]\tvalidation's auc: 0.916008\n",
      "[174]\tvalidation's auc: 0.915968\n",
      "[175]\tvalidation's auc: 0.916142\n",
      "[176]\tvalidation's auc: 0.916077\n",
      "[177]\tvalidation's auc: 0.915994\n",
      "[178]\tvalidation's auc: 0.916097\n",
      "[179]\tvalidation's auc: 0.916146\n",
      "[180]\tvalidation's auc: 0.916315\n",
      "[181]\tvalidation's auc: 0.916331\n",
      "[182]\tvalidation's auc: 0.916437\n",
      "[183]\tvalidation's auc: 0.916435\n",
      "[184]\tvalidation's auc: 0.916479\n",
      "[185]\tvalidation's auc: 0.916471\n",
      "[186]\tvalidation's auc: 0.916745\n",
      "[187]\tvalidation's auc: 0.916779\n",
      "[188]\tvalidation's auc: 0.916686\n",
      "[189]\tvalidation's auc: 0.916566\n",
      "[190]\tvalidation's auc: 0.91633\n",
      "[191]\tvalidation's auc: 0.916337\n",
      "[192]\tvalidation's auc: 0.916374\n",
      "[193]\tvalidation's auc: 0.916507\n",
      "[194]\tvalidation's auc: 0.916465\n",
      "[195]\tvalidation's auc: 0.916485\n",
      "[196]\tvalidation's auc: 0.916482\n",
      "[197]\tvalidation's auc: 0.916458\n",
      "[198]\tvalidation's auc: 0.916411\n",
      "[199]\tvalidation's auc: 0.916526\n",
      "[200]\tvalidation's auc: 0.916582\n",
      "[201]\tvalidation's auc: 0.916437\n",
      "[202]\tvalidation's auc: 0.916394\n",
      "[203]\tvalidation's auc: 0.916383\n",
      "[204]\tvalidation's auc: 0.91639\n",
      "[205]\tvalidation's auc: 0.916365\n",
      "[206]\tvalidation's auc: 0.916246\n",
      "[207]\tvalidation's auc: 0.916263\n",
      "[208]\tvalidation's auc: 0.91643\n",
      "[209]\tvalidation's auc: 0.916415\n",
      "[210]\tvalidation's auc: 0.916589\n",
      "[211]\tvalidation's auc: 0.916592\n",
      "[212]\tvalidation's auc: 0.916593\n",
      "[213]\tvalidation's auc: 0.91652\n",
      "[214]\tvalidation's auc: 0.916406\n",
      "[215]\tvalidation's auc: 0.916533\n",
      "[216]\tvalidation's auc: 0.916534\n",
      "[217]\tvalidation's auc: 0.916501\n",
      "[218]\tvalidation's auc: 0.916531\n",
      "[219]\tvalidation's auc: 0.9165\n",
      "[220]\tvalidation's auc: 0.916328\n",
      "[221]\tvalidation's auc: 0.916293\n",
      "[222]\tvalidation's auc: 0.916241\n",
      "[223]\tvalidation's auc: 0.916246\n",
      "[224]\tvalidation's auc: 0.916166\n",
      "[225]\tvalidation's auc: 0.916235\n",
      "[226]\tvalidation's auc: 0.916208\n",
      "[227]\tvalidation's auc: 0.915947\n",
      "[228]\tvalidation's auc: 0.916015\n",
      "[229]\tvalidation's auc: 0.916033\n",
      "[230]\tvalidation's auc: 0.916068\n",
      "[231]\tvalidation's auc: 0.915945\n",
      "[232]\tvalidation's auc: 0.915915\n",
      "[233]\tvalidation's auc: 0.915943\n",
      "[234]\tvalidation's auc: 0.915925\n",
      "[235]\tvalidation's auc: 0.91589\n",
      "[236]\tvalidation's auc: 0.915854\n",
      "[237]\tvalidation's auc: 0.915853\n",
      "[238]\tvalidation's auc: 0.915778\n",
      "[239]\tvalidation's auc: 0.916023\n",
      "[240]\tvalidation's auc: 0.915836\n",
      "[241]\tvalidation's auc: 0.915816\n",
      "[242]\tvalidation's auc: 0.916028\n",
      "[243]\tvalidation's auc: 0.915973\n",
      "[244]\tvalidation's auc: 0.916013\n",
      "[245]\tvalidation's auc: 0.91618\n",
      "[246]\tvalidation's auc: 0.916218\n",
      "[247]\tvalidation's auc: 0.916331\n",
      "[248]\tvalidation's auc: 0.91622\n",
      "[249]\tvalidation's auc: 0.916304\n",
      "[250]\tvalidation's auc: 0.91639\n",
      "[251]\tvalidation's auc: 0.91661\n",
      "[252]\tvalidation's auc: 0.916414\n",
      "[253]\tvalidation's auc: 0.91642\n",
      "[254]\tvalidation's auc: 0.916502\n",
      "[255]\tvalidation's auc: 0.916444\n",
      "[256]\tvalidation's auc: 0.916425\n",
      "[257]\tvalidation's auc: 0.916352\n",
      "[258]\tvalidation's auc: 0.916292\n",
      "[259]\tvalidation's auc: 0.916227\n",
      "[260]\tvalidation's auc: 0.916388\n",
      "[261]\tvalidation's auc: 0.916422\n",
      "[262]\tvalidation's auc: 0.916386\n",
      "[263]\tvalidation's auc: 0.916436\n",
      "[264]\tvalidation's auc: 0.916579\n",
      "[265]\tvalidation's auc: 0.916491\n",
      "[266]\tvalidation's auc: 0.9166\n",
      "[267]\tvalidation's auc: 0.916814\n",
      "[268]\tvalidation's auc: 0.916842\n",
      "[269]\tvalidation's auc: 0.91687\n",
      "[270]\tvalidation's auc: 0.91684\n",
      "[271]\tvalidation's auc: 0.916836\n",
      "[272]\tvalidation's auc: 0.91685\n",
      "[273]\tvalidation's auc: 0.916903\n",
      "[274]\tvalidation's auc: 0.91687\n",
      "[275]\tvalidation's auc: 0.916801\n",
      "[276]\tvalidation's auc: 0.916821\n",
      "[277]\tvalidation's auc: 0.917016\n",
      "[278]\tvalidation's auc: 0.917031\n",
      "[279]\tvalidation's auc: 0.916986\n",
      "[280]\tvalidation's auc: 0.917084\n",
      "[281]\tvalidation's auc: 0.917082\n",
      "[282]\tvalidation's auc: 0.916985\n",
      "[283]\tvalidation's auc: 0.916924\n",
      "[284]\tvalidation's auc: 0.916802\n",
      "[285]\tvalidation's auc: 0.916987\n",
      "[286]\tvalidation's auc: 0.917043\n",
      "[287]\tvalidation's auc: 0.917065\n",
      "[288]\tvalidation's auc: 0.917186\n",
      "[289]\tvalidation's auc: 0.917091\n",
      "[290]\tvalidation's auc: 0.917314\n",
      "[291]\tvalidation's auc: 0.917357\n",
      "[292]\tvalidation's auc: 0.917526\n",
      "[293]\tvalidation's auc: 0.91738\n",
      "[294]\tvalidation's auc: 0.917452\n",
      "[295]\tvalidation's auc: 0.917412\n",
      "[296]\tvalidation's auc: 0.917372\n",
      "[297]\tvalidation's auc: 0.917319\n",
      "[298]\tvalidation's auc: 0.91738\n",
      "[299]\tvalidation's auc: 0.91729\n",
      "[300]\tvalidation's auc: 0.917301\n",
      "[301]\tvalidation's auc: 0.91726\n",
      "[302]\tvalidation's auc: 0.917259\n",
      "[303]\tvalidation's auc: 0.917323\n",
      "[304]\tvalidation's auc: 0.917377\n",
      "[305]\tvalidation's auc: 0.917334\n",
      "[306]\tvalidation's auc: 0.917264\n",
      "[307]\tvalidation's auc: 0.91713\n",
      "[308]\tvalidation's auc: 0.917108\n",
      "[309]\tvalidation's auc: 0.917165\n",
      "[310]\tvalidation's auc: 0.917057\n",
      "[311]\tvalidation's auc: 0.917221\n",
      "[312]\tvalidation's auc: 0.917269\n",
      "[313]\tvalidation's auc: 0.917352\n",
      "[314]\tvalidation's auc: 0.917388\n",
      "[315]\tvalidation's auc: 0.917296\n",
      "[316]\tvalidation's auc: 0.917214\n",
      "[317]\tvalidation's auc: 0.91748\n",
      "[318]\tvalidation's auc: 0.917349\n",
      "[319]\tvalidation's auc: 0.91734\n",
      "[320]\tvalidation's auc: 0.917299\n",
      "[321]\tvalidation's auc: 0.917324\n",
      "[322]\tvalidation's auc: 0.917539\n",
      "[323]\tvalidation's auc: 0.917512\n",
      "[324]\tvalidation's auc: 0.917463\n",
      "[325]\tvalidation's auc: 0.917358\n",
      "[326]\tvalidation's auc: 0.917448\n",
      "[327]\tvalidation's auc: 0.917453\n",
      "[328]\tvalidation's auc: 0.9175\n",
      "[329]\tvalidation's auc: 0.917539\n",
      "[330]\tvalidation's auc: 0.917513\n",
      "[331]\tvalidation's auc: 0.917548\n",
      "[332]\tvalidation's auc: 0.917552\n",
      "[333]\tvalidation's auc: 0.917592\n",
      "[334]\tvalidation's auc: 0.917525\n",
      "[335]\tvalidation's auc: 0.917572\n",
      "[336]\tvalidation's auc: 0.917537\n",
      "[337]\tvalidation's auc: 0.917552\n",
      "[338]\tvalidation's auc: 0.917464\n",
      "[339]\tvalidation's auc: 0.917567\n",
      "[340]\tvalidation's auc: 0.917597\n",
      "[341]\tvalidation's auc: 0.917446\n",
      "[342]\tvalidation's auc: 0.91745\n",
      "[343]\tvalidation's auc: 0.917495\n",
      "[344]\tvalidation's auc: 0.917607\n",
      "[345]\tvalidation's auc: 0.917494\n",
      "[346]\tvalidation's auc: 0.917481\n",
      "[347]\tvalidation's auc: 0.917479\n",
      "[348]\tvalidation's auc: 0.917472\n",
      "[349]\tvalidation's auc: 0.917452\n",
      "[350]\tvalidation's auc: 0.917529\n",
      "[351]\tvalidation's auc: 0.917552\n",
      "[352]\tvalidation's auc: 0.917605\n",
      "[353]\tvalidation's auc: 0.917695\n",
      "[354]\tvalidation's auc: 0.917669\n",
      "[355]\tvalidation's auc: 0.917712\n",
      "[356]\tvalidation's auc: 0.917764\n",
      "[357]\tvalidation's auc: 0.917813\n",
      "[358]\tvalidation's auc: 0.917688\n",
      "[359]\tvalidation's auc: 0.917666\n",
      "[360]\tvalidation's auc: 0.917792\n",
      "[361]\tvalidation's auc: 0.917835\n",
      "[362]\tvalidation's auc: 0.917856\n",
      "[363]\tvalidation's auc: 0.917785\n",
      "[364]\tvalidation's auc: 0.917869\n",
      "[365]\tvalidation's auc: 0.917857\n",
      "[366]\tvalidation's auc: 0.917845\n",
      "[367]\tvalidation's auc: 0.917779\n",
      "[368]\tvalidation's auc: 0.917804\n",
      "[369]\tvalidation's auc: 0.91786\n",
      "[370]\tvalidation's auc: 0.917879\n",
      "[371]\tvalidation's auc: 0.917896\n",
      "[372]\tvalidation's auc: 0.917795\n",
      "[373]\tvalidation's auc: 0.917718\n",
      "[374]\tvalidation's auc: 0.917785\n",
      "[375]\tvalidation's auc: 0.917768\n",
      "[376]\tvalidation's auc: 0.917741\n",
      "[377]\tvalidation's auc: 0.917753\n",
      "[378]\tvalidation's auc: 0.917642\n",
      "[379]\tvalidation's auc: 0.917604\n",
      "[380]\tvalidation's auc: 0.917466\n",
      "[381]\tvalidation's auc: 0.917476\n",
      "[382]\tvalidation's auc: 0.917449\n",
      "[383]\tvalidation's auc: 0.917501\n",
      "[384]\tvalidation's auc: 0.917397\n",
      "[385]\tvalidation's auc: 0.917402\n",
      "[386]\tvalidation's auc: 0.917414\n",
      "[387]\tvalidation's auc: 0.917416\n",
      "[388]\tvalidation's auc: 0.917398\n",
      "[389]\tvalidation's auc: 0.917499\n",
      "[390]\tvalidation's auc: 0.917547\n",
      "[391]\tvalidation's auc: 0.917515\n",
      "[392]\tvalidation's auc: 0.917434\n",
      "[393]\tvalidation's auc: 0.91736\n",
      "[394]\tvalidation's auc: 0.917401\n",
      "[395]\tvalidation's auc: 0.917471\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[396]\tvalidation's auc: 0.917394\n",
      "[397]\tvalidation's auc: 0.917365\n",
      "[398]\tvalidation's auc: 0.917257\n",
      "[399]\tvalidation's auc: 0.917224\n",
      "[400]\tvalidation's auc: 0.917144\n",
      "[401]\tvalidation's auc: 0.917324\n",
      "[402]\tvalidation's auc: 0.917402\n",
      "[403]\tvalidation's auc: 0.917396\n",
      "[404]\tvalidation's auc: 0.9173\n",
      "[405]\tvalidation's auc: 0.917218\n",
      "[406]\tvalidation's auc: 0.917276\n",
      "[407]\tvalidation's auc: 0.917245\n",
      "[408]\tvalidation's auc: 0.917218\n",
      "[409]\tvalidation's auc: 0.917239\n",
      "[410]\tvalidation's auc: 0.917435\n",
      "[411]\tvalidation's auc: 0.917416\n",
      "[412]\tvalidation's auc: 0.917407\n",
      "[413]\tvalidation's auc: 0.917313\n",
      "[414]\tvalidation's auc: 0.917336\n",
      "[415]\tvalidation's auc: 0.917358\n",
      "[416]\tvalidation's auc: 0.91724\n",
      "[417]\tvalidation's auc: 0.91713\n",
      "[418]\tvalidation's auc: 0.917284\n",
      "[419]\tvalidation's auc: 0.917204\n",
      "[420]\tvalidation's auc: 0.917257\n",
      "[421]\tvalidation's auc: 0.917232\n",
      "[422]\tvalidation's auc: 0.917229\n",
      "[423]\tvalidation's auc: 0.917145\n",
      "[424]\tvalidation's auc: 0.917198\n",
      "[425]\tvalidation's auc: 0.917212\n",
      "[426]\tvalidation's auc: 0.917118\n",
      "[427]\tvalidation's auc: 0.917064\n",
      "[428]\tvalidation's auc: 0.917089\n",
      "[429]\tvalidation's auc: 0.917154\n",
      "[430]\tvalidation's auc: 0.917145\n",
      "[431]\tvalidation's auc: 0.917124\n",
      "[432]\tvalidation's auc: 0.917163\n",
      "[433]\tvalidation's auc: 0.917185\n",
      "[434]\tvalidation's auc: 0.917167\n",
      "[435]\tvalidation's auc: 0.917057\n",
      "[436]\tvalidation's auc: 0.916991\n",
      "[437]\tvalidation's auc: 0.916818\n",
      "[438]\tvalidation's auc: 0.916808\n",
      "[439]\tvalidation's auc: 0.916685\n",
      "[440]\tvalidation's auc: 0.916682\n",
      "[441]\tvalidation's auc: 0.916648\n",
      "[442]\tvalidation's auc: 0.916612\n",
      "[443]\tvalidation's auc: 0.91662\n",
      "[444]\tvalidation's auc: 0.916525\n",
      "[445]\tvalidation's auc: 0.916461\n",
      "[446]\tvalidation's auc: 0.916402\n",
      "[447]\tvalidation's auc: 0.916416\n",
      "[448]\tvalidation's auc: 0.916305\n",
      "[449]\tvalidation's auc: 0.916395\n",
      "[450]\tvalidation's auc: 0.916538\n",
      "[451]\tvalidation's auc: 0.916601\n",
      "[452]\tvalidation's auc: 0.916495\n",
      "[453]\tvalidation's auc: 0.916438\n",
      "[454]\tvalidation's auc: 0.916447\n",
      "[455]\tvalidation's auc: 0.916404\n",
      "[456]\tvalidation's auc: 0.916347\n",
      "[457]\tvalidation's auc: 0.916387\n",
      "[458]\tvalidation's auc: 0.916427\n",
      "[459]\tvalidation's auc: 0.916405\n",
      "[460]\tvalidation's auc: 0.91633\n",
      "[461]\tvalidation's auc: 0.916228\n",
      "[462]\tvalidation's auc: 0.916261\n",
      "[463]\tvalidation's auc: 0.916268\n",
      "[464]\tvalidation's auc: 0.916271\n",
      "[465]\tvalidation's auc: 0.91624\n",
      "[466]\tvalidation's auc: 0.916201\n",
      "[467]\tvalidation's auc: 0.916309\n",
      "[468]\tvalidation's auc: 0.916258\n",
      "[469]\tvalidation's auc: 0.916274\n",
      "[470]\tvalidation's auc: 0.916214\n",
      "[471]\tvalidation's auc: 0.916365\n",
      "[472]\tvalidation's auc: 0.916374\n",
      "[473]\tvalidation's auc: 0.916427\n",
      "[474]\tvalidation's auc: 0.916546\n",
      "[475]\tvalidation's auc: 0.916509\n",
      "[476]\tvalidation's auc: 0.916448\n",
      "[477]\tvalidation's auc: 0.916301\n",
      "[478]\tvalidation's auc: 0.91632\n",
      "[479]\tvalidation's auc: 0.916345\n",
      "[480]\tvalidation's auc: 0.91639\n",
      "[481]\tvalidation's auc: 0.916407\n",
      "[482]\tvalidation's auc: 0.916337\n",
      "[483]\tvalidation's auc: 0.916315\n",
      "[484]\tvalidation's auc: 0.916308\n",
      "[485]\tvalidation's auc: 0.916272\n",
      "[486]\tvalidation's auc: 0.916267\n",
      "[487]\tvalidation's auc: 0.916338\n",
      "[488]\tvalidation's auc: 0.916455\n",
      "[489]\tvalidation's auc: 0.916491\n",
      "[490]\tvalidation's auc: 0.916379\n",
      "[491]\tvalidation's auc: 0.916355\n",
      "[492]\tvalidation's auc: 0.91637\n",
      "[493]\tvalidation's auc: 0.916342\n",
      "[494]\tvalidation's auc: 0.916338\n",
      "[495]\tvalidation's auc: 0.916329\n",
      "[496]\tvalidation's auc: 0.916408\n",
      "[497]\tvalidation's auc: 0.916324\n",
      "[498]\tvalidation's auc: 0.916227\n",
      "[499]\tvalidation's auc: 0.916268\n",
      "[500]\tvalidation's auc: 0.916176\n",
      "[501]\tvalidation's auc: 0.916301\n",
      "[502]\tvalidation's auc: 0.916315\n",
      "[503]\tvalidation's auc: 0.916344\n",
      "[504]\tvalidation's auc: 0.916468\n",
      "[505]\tvalidation's auc: 0.916391\n",
      "[506]\tvalidation's auc: 0.916336\n",
      "[507]\tvalidation's auc: 0.916263\n",
      "[508]\tvalidation's auc: 0.916318\n",
      "[509]\tvalidation's auc: 0.916327\n",
      "[510]\tvalidation's auc: 0.916219\n",
      "[511]\tvalidation's auc: 0.916265\n",
      "[512]\tvalidation's auc: 0.916175\n",
      "[513]\tvalidation's auc: 0.916169\n",
      "[514]\tvalidation's auc: 0.916257\n",
      "[515]\tvalidation's auc: 0.916258\n",
      "[516]\tvalidation's auc: 0.916385\n",
      "[517]\tvalidation's auc: 0.916324\n",
      "[518]\tvalidation's auc: 0.916258\n",
      "[519]\tvalidation's auc: 0.916249\n",
      "[520]\tvalidation's auc: 0.916201\n",
      "[521]\tvalidation's auc: 0.916221\n",
      "[522]\tvalidation's auc: 0.915973\n",
      "[523]\tvalidation's auc: 0.91588\n",
      "[524]\tvalidation's auc: 0.915726\n",
      "[525]\tvalidation's auc: 0.915635\n",
      "[526]\tvalidation's auc: 0.915701\n",
      "[527]\tvalidation's auc: 0.915635\n",
      "[528]\tvalidation's auc: 0.915722\n",
      "[529]\tvalidation's auc: 0.915657\n",
      "[530]\tvalidation's auc: 0.915613\n",
      "[531]\tvalidation's auc: 0.915622\n",
      "[532]\tvalidation's auc: 0.915659\n",
      "[533]\tvalidation's auc: 0.91559\n",
      "[534]\tvalidation's auc: 0.915561\n",
      "[535]\tvalidation's auc: 0.915641\n",
      "[536]\tvalidation's auc: 0.915603\n",
      "[537]\tvalidation's auc: 0.915595\n",
      "[538]\tvalidation's auc: 0.915546\n",
      "[539]\tvalidation's auc: 0.915636\n",
      "[540]\tvalidation's auc: 0.915534\n",
      "[541]\tvalidation's auc: 0.91561\n",
      "[542]\tvalidation's auc: 0.915587\n",
      "[543]\tvalidation's auc: 0.915503\n",
      "[544]\tvalidation's auc: 0.915483\n",
      "[545]\tvalidation's auc: 0.915584\n",
      "[546]\tvalidation's auc: 0.915577\n",
      "[547]\tvalidation's auc: 0.915531\n",
      "[548]\tvalidation's auc: 0.915504\n",
      "[549]\tvalidation's auc: 0.915512\n",
      "[550]\tvalidation's auc: 0.915553\n",
      "[551]\tvalidation's auc: 0.915735\n",
      "[552]\tvalidation's auc: 0.915831\n",
      "[553]\tvalidation's auc: 0.915812\n",
      "[554]\tvalidation's auc: 0.915684\n",
      "[555]\tvalidation's auc: 0.915631\n",
      "[556]\tvalidation's auc: 0.915703\n",
      "[557]\tvalidation's auc: 0.915735\n",
      "[558]\tvalidation's auc: 0.915619\n",
      "[559]\tvalidation's auc: 0.91553\n",
      "[560]\tvalidation's auc: 0.915579\n",
      "[561]\tvalidation's auc: 0.915554\n",
      "[562]\tvalidation's auc: 0.915512\n",
      "[563]\tvalidation's auc: 0.91543\n",
      "[564]\tvalidation's auc: 0.915389\n",
      "[565]\tvalidation's auc: 0.915388\n",
      "[566]\tvalidation's auc: 0.915285\n",
      "[567]\tvalidation's auc: 0.915224\n",
      "[568]\tvalidation's auc: 0.915142\n",
      "[569]\tvalidation's auc: 0.91513\n",
      "[570]\tvalidation's auc: 0.915184\n",
      "[571]\tvalidation's auc: 0.915214\n",
      "Early stopping, best iteration is:\n",
      "[371]\tvalidation's auc: 0.917896\n",
      " Fold 4 | AUC_ROC ： 91.78962789641628%\n"
     ]
    }
   ],
   "source": [
    "best_auc = 0\n",
    "best_model = None\n",
    "\n",
    "for k, (train_indices, val_indices) in enumerate(splits):\n",
    "    print(\"第 %d 折\\n\" % k)\n",
    "    X_train_data, X_val_data = X.iloc[train_indices], X.iloc[val_indices] # 训练集， 验证集\n",
    "    y_train, y_val = y.iloc[train_indices], y.iloc[val_indices] # 训练标签，验证标签\n",
    "    #print(\"X_train_data shape : \\t\", X_train_data.shape, \"X_val_data shape : \\t\", X_val_data.shape)\n",
    "    \n",
    "    train_dataset = lgb.Dataset(X_train_data, label=y_train) # 训练集\n",
    "    val_dataset = lgb.Dataset(X_val_data, label=y_val) # 验证集\n",
    "    \n",
    "    lgb_model = lgb.train(params=params, # 超参数设置\n",
    "                          train_set=train_dataset, # 训练数据\n",
    "                          num_boost_round=10000, # 循环的轮数\n",
    "                          valid_sets=val_dataset, # 验证数据\n",
    "                          valid_names='validation', # 验证集名称\n",
    "                          early_stopping_rounds=200,) # 如果200轮后没有提升，就停止循环\n",
    "    # 保存特征重要性\n",
    "    feature_importances[f'fold_{k+1}'] = lgb_model.feature_importance()\n",
    "    \n",
    "    # 对验证集进行预测\n",
    "    y_val_pred = lgb_model.predict(X_val_data)\n",
    "    \n",
    "    # 计算roc_auc\n",
    "    roc_auc = roc_auc_score(y_val, y_val_pred)\n",
    "    print(f\" Fold {k + 1} | AUC_ROC ： { roc_auc * 100}%\")\n",
    "    \n",
    "    # 判断是否是最优模型\n",
    "    if roc_auc > best_auc:\n",
    "        best_auc = roc_auc\n",
    "        best_model = lgb_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(154, 5)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importances.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>features</th>\n",
       "      <th>fold_1</th>\n",
       "      <th>fold_2</th>\n",
       "      <th>fold_3</th>\n",
       "      <th>fold_4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>index</td>\n",
       "      <td>5040</td>\n",
       "      <td>2791</td>\n",
       "      <td>3878</td>\n",
       "      <td>24806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>TransactionAmt</td>\n",
       "      <td>4134</td>\n",
       "      <td>2149</td>\n",
       "      <td>2986</td>\n",
       "      <td>19489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ProductCD</td>\n",
       "      <td>197</td>\n",
       "      <td>156</td>\n",
       "      <td>167</td>\n",
       "      <td>829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>card1</td>\n",
       "      <td>4426</td>\n",
       "      <td>2489</td>\n",
       "      <td>3404</td>\n",
       "      <td>17317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>card2</td>\n",
       "      <td>3701</td>\n",
       "      <td>2236</td>\n",
       "      <td>2855</td>\n",
       "      <td>13681</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         features  fold_1  fold_2  fold_3  fold_4\n",
       "0           index    5040    2791    3878   24806\n",
       "1  TransactionAmt    4134    2149    2986   19489\n",
       "2       ProductCD     197     156     167     829\n",
       "3           card1    4426    2489    3404   17317\n",
       "4           card2    3701    2236    2855   13681"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importances.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_importances['average'] = feature_importances[[f'fold_{k+1}' for k in range(folds.n_splits-1)]].mean(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>features</th>\n",
       "      <th>fold_1</th>\n",
       "      <th>fold_2</th>\n",
       "      <th>fold_3</th>\n",
       "      <th>fold_4</th>\n",
       "      <th>average</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>index</td>\n",
       "      <td>5040</td>\n",
       "      <td>2791</td>\n",
       "      <td>3878</td>\n",
       "      <td>24806</td>\n",
       "      <td>9128.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>TransactionAmt</td>\n",
       "      <td>4134</td>\n",
       "      <td>2149</td>\n",
       "      <td>2986</td>\n",
       "      <td>19489</td>\n",
       "      <td>7189.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ProductCD</td>\n",
       "      <td>197</td>\n",
       "      <td>156</td>\n",
       "      <td>167</td>\n",
       "      <td>829</td>\n",
       "      <td>337.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>card1</td>\n",
       "      <td>4426</td>\n",
       "      <td>2489</td>\n",
       "      <td>3404</td>\n",
       "      <td>17317</td>\n",
       "      <td>6909.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>card2</td>\n",
       "      <td>3701</td>\n",
       "      <td>2236</td>\n",
       "      <td>2855</td>\n",
       "      <td>13681</td>\n",
       "      <td>5618.25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         features  fold_1  fold_2  fold_3  fold_4  average\n",
       "0           index    5040    2791    3878   24806  9128.75\n",
       "1  TransactionAmt    4134    2149    2986   19489  7189.50\n",
       "2       ProductCD     197     156     167     829   337.25\n",
       "3           card1    4426    2489    3404   17317  6909.00\n",
       "4           card2    3701    2236    2855   13681  5618.25"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importances.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '50 top features importance over 4 folds average.')"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x1152 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化显示前50个特征\n",
    "plt.figure(figsize=(16, 16))\n",
    "sns.barplot(data=feature_importances.sort_values(by='average', ascending=False).head(50), \n",
    "            x='average', \n",
    "            y='features')\n",
    "plt.title(\"50 top features importance over {} folds average.\".format(folds.n_splits-1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The best roc_auc :  0.9178962789641628\n"
     ]
    }
   ],
   "source": [
    "print(\"The best roc_auc : \", roc_auc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['best_model.pkl']"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "joblib.dump(best_model, \"best_model.pkl\") # 保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对与test进行预测\n",
    "\n",
    "y_test_pred = best_model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506691,)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test_pred.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = np.round(y_test_pred) # np.round() 四舍五入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Counter({0.0: 498364, 1.0: 8327})"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from collections import Counter\n",
    "nd(y_test_pred) \n",
    "Counter(labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
